From ac1196b529e1a78b81ee9f4e79b81ccec24347ca Mon Sep 17 00:00:00 2001 From: Dizzy Date: Sat, 8 Jun 2024 14:55:56 -0400 Subject: [PATCH] remove folder --- .obsidian/app.json | 1 - .obsidian/appearance.json | 6 - .obsidian/community-plugins.json | 6 - .obsidian/core-plugins-migration.json | 30 - .obsidian/core-plugins.json | 20 - .obsidian/graph.json | 22 - .obsidian/icons/lucide-icons.zip | Bin 1022710 -> 0 bytes .obsidian/icons/lucide-icons/Angry.svg | 1 - .obsidian/icons/lucide-icons/Frown.svg | 1 - .obsidian/icons/lucide-icons/Heart.svg | 1 - .obsidian/icons/lucide-icons/PartyPopper.svg | 1 - .obsidian/icons/lucide-icons/Skull.svg | 1 - .obsidian/icons/lucide-icons/Smile.svg | 1 - .obsidian/plugins/obsidian-git/data.json | 58 - .obsidian/plugins/obsidian-git/main.js | 45283 ---------------- .obsidian/plugins/obsidian-git/manifest.json | 9 - .obsidian/plugins/obsidian-git/styles.css | 558 - .../plugins/obsidian-icon-folder/data.json | 29 - .../plugins/obsidian-icon-folder/main.js | 6607 --- .../obsidian-icon-folder/manifest.json | 10 - .../plugins/obsidian-icon-folder/styles.css | 118 - .../plugins/obsidian-regex-replace/main.js | 320 - .../obsidian-regex-replace/manifest.json | 10 - .../plugins/obsidian-regex-replace/styles.css | 51 - .../plugins/obsidian-style-settings/data.json | 3 - .../plugins/obsidian-style-settings/main.js | 9858 ---- .../obsidian-style-settings/manifest.json | 10 - .../obsidian-style-settings/styles.css | 243 - .obsidian/snippets/cool.css | 31 - .obsidian/themes/Blue Topaz/manifest.json | 7 - .obsidian/themes/Blue Topaz/theme.css | 29623 ---------- .obsidian/themes/PLN/manifest.json | 7 - .obsidian/themes/PLN/theme.css | 2236 - .obsidian/themes/Prism/manifest.json | 8 - .obsidian/themes/Prism/theme.css | 10139 ---- .obsidian/workspace.json | 398 - 36 files changed, 105707 deletions(-) delete mode 100644 .obsidian/app.json delete mode 100644 .obsidian/appearance.json delete mode 100644 .obsidian/community-plugins.json delete mode 100644 .obsidian/core-plugins-migration.json delete mode 100644 .obsidian/core-plugins.json delete mode 100644 .obsidian/graph.json delete mode 100644 .obsidian/icons/lucide-icons.zip delete mode 100644 .obsidian/icons/lucide-icons/Angry.svg delete mode 100644 .obsidian/icons/lucide-icons/Frown.svg delete mode 100644 .obsidian/icons/lucide-icons/Heart.svg delete mode 100644 .obsidian/icons/lucide-icons/PartyPopper.svg delete mode 100644 .obsidian/icons/lucide-icons/Skull.svg delete mode 100644 .obsidian/icons/lucide-icons/Smile.svg delete mode 100644 .obsidian/plugins/obsidian-git/data.json delete mode 100644 .obsidian/plugins/obsidian-git/main.js delete mode 100644 .obsidian/plugins/obsidian-git/manifest.json delete mode 100644 .obsidian/plugins/obsidian-git/styles.css delete mode 100644 .obsidian/plugins/obsidian-icon-folder/data.json delete mode 100644 .obsidian/plugins/obsidian-icon-folder/main.js delete mode 100644 .obsidian/plugins/obsidian-icon-folder/manifest.json delete mode 100644 .obsidian/plugins/obsidian-icon-folder/styles.css delete mode 100644 .obsidian/plugins/obsidian-regex-replace/main.js delete mode 100644 .obsidian/plugins/obsidian-regex-replace/manifest.json delete mode 100644 .obsidian/plugins/obsidian-regex-replace/styles.css delete mode 100644 .obsidian/plugins/obsidian-style-settings/data.json delete mode 100644 .obsidian/plugins/obsidian-style-settings/main.js delete mode 100644 .obsidian/plugins/obsidian-style-settings/manifest.json delete mode 100644 .obsidian/plugins/obsidian-style-settings/styles.css delete mode 100644 .obsidian/snippets/cool.css delete mode 100644 .obsidian/themes/Blue Topaz/manifest.json delete mode 100644 .obsidian/themes/Blue Topaz/theme.css delete mode 100644 .obsidian/themes/PLN/manifest.json delete mode 100644 .obsidian/themes/PLN/theme.css delete mode 100644 .obsidian/themes/Prism/manifest.json delete mode 100644 .obsidian/themes/Prism/theme.css delete mode 100644 .obsidian/workspace.json diff --git a/.obsidian/app.json b/.obsidian/app.json deleted file mode 100644 index 9e26dfe..0000000 --- a/.obsidian/app.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/.obsidian/appearance.json b/.obsidian/appearance.json deleted file mode 100644 index 557a05e..0000000 --- a/.obsidian/appearance.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "cssTheme": "Prism", - "enabledCssSnippets": [ - "cool" - ] -} \ No newline at end of file diff --git a/.obsidian/community-plugins.json b/.obsidian/community-plugins.json deleted file mode 100644 index b3926ed..0000000 --- a/.obsidian/community-plugins.json +++ /dev/null @@ -1,6 +0,0 @@ -[ - "obsidian-regex-replace", - "obsidian-git", - "obsidian-style-settings", - "obsidian-icon-folder" -] \ No newline at end of file diff --git a/.obsidian/core-plugins-migration.json b/.obsidian/core-plugins-migration.json deleted file mode 100644 index 436f43c..0000000 --- a/.obsidian/core-plugins-migration.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "file-explorer": true, - "global-search": true, - "switcher": true, - "graph": true, - "backlink": true, - "canvas": true, - "outgoing-link": true, - "tag-pane": true, - "properties": false, - "page-preview": true, - "daily-notes": true, - "templates": true, - "note-composer": true, - "command-palette": true, - "slash-command": false, - "editor-status": true, - "bookmarks": true, - "markdown-importer": false, - "zk-prefixer": false, - "random-note": false, - "outline": true, - "word-count": true, - "slides": false, - "audio-recorder": false, - "workspaces": false, - "file-recovery": true, - "publish": false, - "sync": false -} \ No newline at end of file diff --git a/.obsidian/core-plugins.json b/.obsidian/core-plugins.json deleted file mode 100644 index 9405bfd..0000000 --- a/.obsidian/core-plugins.json +++ /dev/null @@ -1,20 +0,0 @@ -[ - "file-explorer", - "global-search", - "switcher", - "graph", - "backlink", - "canvas", - "outgoing-link", - "tag-pane", - "page-preview", - "daily-notes", - "templates", - "note-composer", - "command-palette", - "editor-status", - "bookmarks", - "outline", - "word-count", - "file-recovery" -] \ No newline at end of file diff --git a/.obsidian/graph.json b/.obsidian/graph.json deleted file mode 100644 index 42a46ec..0000000 --- a/.obsidian/graph.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "collapse-filter": true, - "search": "", - "showTags": false, - "showAttachments": false, - "hideUnresolved": false, - "showOrphans": true, - "collapse-color-groups": true, - "colorGroups": [], - "collapse-display": true, - "showArrow": false, - "textFadeMultiplier": 0, - "nodeSizeMultiplier": 1, - "lineSizeMultiplier": 1, - "collapse-forces": true, - "centerStrength": 0.518713248970312, - "repelStrength": 10, - "linkStrength": 1, - "linkDistance": 250, - "scale": 1, - "close": true -} \ No newline at end of file diff --git a/.obsidian/icons/lucide-icons.zip b/.obsidian/icons/lucide-icons.zip deleted file mode 100644 index 1874651d0c4198558403817218f5e88997426372..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1022710 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

r!MDR#6xT2fh*ANxjB5jB^Qr_0pc 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

8>-`7JJxs-LuPeCSj0I;uheQV`ezR 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

5!Q8y$a~-k`D4$i@2YHJ#(^Y4s443V3T)0j? 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 diff --git a/.obsidian/icons/lucide-icons/Angry.svg b/.obsidian/icons/lucide-icons/Angry.svg deleted file mode 100644 index dbae0ad..0000000 --- a/.obsidian/icons/lucide-icons/Angry.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/.obsidian/icons/lucide-icons/Frown.svg b/.obsidian/icons/lucide-icons/Frown.svg deleted file mode 100644 index add843d..0000000 --- a/.obsidian/icons/lucide-icons/Frown.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/.obsidian/icons/lucide-icons/Heart.svg b/.obsidian/icons/lucide-icons/Heart.svg deleted file mode 100644 index 5d60b16..0000000 --- a/.obsidian/icons/lucide-icons/Heart.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/.obsidian/icons/lucide-icons/PartyPopper.svg b/.obsidian/icons/lucide-icons/PartyPopper.svg deleted file mode 100644 index ec55c06..0000000 --- a/.obsidian/icons/lucide-icons/PartyPopper.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/.obsidian/icons/lucide-icons/Skull.svg b/.obsidian/icons/lucide-icons/Skull.svg deleted file mode 100644 index 0b7bf42..0000000 --- a/.obsidian/icons/lucide-icons/Skull.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/.obsidian/icons/lucide-icons/Smile.svg b/.obsidian/icons/lucide-icons/Smile.svg deleted file mode 100644 index d6781e5..0000000 --- a/.obsidian/icons/lucide-icons/Smile.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/.obsidian/plugins/obsidian-git/data.json b/.obsidian/plugins/obsidian-git/data.json deleted file mode 100644 index c8f4073..0000000 --- a/.obsidian/plugins/obsidian-git/data.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "commitMessage": "vault backup: {{date}}", - "commitDateFormat": "YYYY-MM-DD HH:mm:ss", - "autoSaveInterval": 0, - "autoPushInterval": 0, - "autoPullInterval": 0, - "autoPullOnBoot": false, - "disablePush": false, - "pullBeforePush": true, - "disablePopups": false, - "disablePopupsForNoChanges": false, - "listChangedFilesInMessageBody": false, - "showStatusBar": true, - "updateSubmodules": false, - "syncMethod": "rebase", - "customMessageOnAutoBackup": false, - "autoBackupAfterFileChange": false, - "treeStructure": false, - "refreshSourceControl": true, - "basePath": "", - "differentIntervalCommitAndPush": false, - "changedFilesInStatusBar": false, - "showedMobileNotice": true, - "refreshSourceControlTimer": 7000, - "showBranchStatusBar": true, - "setLastSaveToLastCommit": false, - "submoduleRecurseCheckout": false, - "gitDir": "", - "showFileMenu": true, - "authorInHistoryView": "hide", - "dateInHistoryView": false, - "lineAuthor": { - "show": false, - "followMovement": "inactive", - "authorDisplay": "initials", - "showCommitHash": false, - "dateTimeFormatOptions": "date", - "dateTimeFormatCustomString": "YYYY-MM-DD HH:mm", - "dateTimeTimezone": "viewer-local", - "coloringMaxAge": "1y", - "colorNew": { - "r": 255, - "g": 150, - "b": 150 - }, - "colorOld": { - "r": 120, - "g": 160, - "b": 255 - }, - "textColorCss": "var(--text-muted)", - "ignoreWhitespace": false, - "gutterSpacingFallbackLength": 5, - "lastShownAuthorDisplay": "initials", - "lastShownDateTimeFormatOptions": "date" - }, - "autoCommitMessage": "vault backup: {{date}}" -} \ No newline at end of file diff --git a/.obsidian/plugins/obsidian-git/main.js b/.obsidian/plugins/obsidian-git/main.js deleted file mode 100644 index 9457262..0000000 --- a/.obsidian/plugins/obsidian-git/main.js +++ /dev/null @@ -1,45283 +0,0 @@ -/* -THIS IS A GENERATED/BUNDLED FILE BY ESBUILD -if you want to view the source visit the plugins github repository (https://github.com/denolehov/obsidian-git) -*/ - -var __create = Object.create; -var __defProp = Object.defineProperty; -var __getOwnPropDesc = Object.getOwnPropertyDescriptor; -var __getOwnPropNames = Object.getOwnPropertyNames; -var __getProtoOf = Object.getPrototypeOf; -var __hasOwnProp = Object.prototype.hasOwnProperty; -var __defNormalProp = (obj, key2, value) => key2 in obj ? __defProp(obj, key2, { enumerable: true, configurable: true, writable: true, value }) : obj[key2] = value; -var __esm = (fn, res) => function __init() { - return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res; -}; -var __commonJS = (cb, mod) => function __require() { - return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; -}; -var __export = (target, all) => { - for (var name in all) - __defProp(target, name, { get: all[name], enumerable: true }); -}; -var __copyProps = (to, from, except, desc) => { - if (from && typeof from === "object" || typeof from === "function") { - for (let key2 of __getOwnPropNames(from)) - if (!__hasOwnProp.call(to, key2) && key2 !== except) - __defProp(to, key2, { get: () => from[key2], enumerable: !(desc = __getOwnPropDesc(from, key2)) || desc.enumerable }); - } - return to; -}; -var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( - // If the importer is in node compatibility mode or this is not an ESM - // file that has been converted to a CommonJS file using a Babel- - // compatible transform (i.e. "__esModule" has not been set), then set - // "default" to the CommonJS "module.exports" for node compatibility. - isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, - mod -)); -var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); -var __publicField = (obj, key2, value) => { - __defNormalProp(obj, typeof key2 !== "symbol" ? key2 + "" : key2, value); - return value; -}; - -// node_modules/.pnpm/base64-js@1.5.1/node_modules/base64-js/index.js -var require_base64_js = __commonJS({ - "node_modules/.pnpm/base64-js@1.5.1/node_modules/base64-js/index.js"(exports2) { - "use strict"; - init_polyfill_buffer(); - exports2.byteLength = byteLength; - exports2.toByteArray = toByteArray; - exports2.fromByteArray = fromByteArray; - var lookup = []; - var revLookup = []; - var Arr = typeof Uint8Array !== "undefined" ? Uint8Array : Array; - var code = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; - for (i = 0, len = code.length; i < len; ++i) { - lookup[i] = code[i]; - revLookup[code.charCodeAt(i)] = i; - } - var i; - var len; - revLookup["-".charCodeAt(0)] = 62; - revLookup["_".charCodeAt(0)] = 63; - function getLens(b64) { - var len2 = b64.length; - if (len2 % 4 > 0) { - throw new Error("Invalid string. Length must be a multiple of 4"); - } - var validLen = b64.indexOf("="); - if (validLen === -1) - validLen = len2; - var placeHoldersLen = validLen === len2 ? 0 : 4 - validLen % 4; - return [validLen, placeHoldersLen]; - } - function byteLength(b64) { - var lens = getLens(b64); - var validLen = lens[0]; - var placeHoldersLen = lens[1]; - return (validLen + placeHoldersLen) * 3 / 4 - placeHoldersLen; - } - function _byteLength(b64, validLen, placeHoldersLen) { - return (validLen + placeHoldersLen) * 3 / 4 - placeHoldersLen; - } - function toByteArray(b64) { - var tmp; - var lens = getLens(b64); - var validLen = lens[0]; - var placeHoldersLen = lens[1]; - var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen)); - var curByte = 0; - var len2 = placeHoldersLen > 0 ? validLen - 4 : validLen; - var i2; - for (i2 = 0; i2 < len2; i2 += 4) { - tmp = revLookup[b64.charCodeAt(i2)] << 18 | revLookup[b64.charCodeAt(i2 + 1)] << 12 | revLookup[b64.charCodeAt(i2 + 2)] << 6 | revLookup[b64.charCodeAt(i2 + 3)]; - arr[curByte++] = tmp >> 16 & 255; - arr[curByte++] = tmp >> 8 & 255; - arr[curByte++] = tmp & 255; - } - if (placeHoldersLen === 2) { - tmp = revLookup[b64.charCodeAt(i2)] << 2 | revLookup[b64.charCodeAt(i2 + 1)] >> 4; - arr[curByte++] = tmp & 255; - } - if (placeHoldersLen === 1) { - tmp = revLookup[b64.charCodeAt(i2)] << 10 | revLookup[b64.charCodeAt(i2 + 1)] << 4 | revLookup[b64.charCodeAt(i2 + 2)] >> 2; - arr[curByte++] = tmp >> 8 & 255; - arr[curByte++] = tmp & 255; - } - return arr; - } - function tripletToBase64(num2) { - return lookup[num2 >> 18 & 63] + lookup[num2 >> 12 & 63] + lookup[num2 >> 6 & 63] + lookup[num2 & 63]; - } - function encodeChunk(uint8, start, end) { - var tmp; - var output = []; - for (var i2 = start; i2 < end; i2 += 3) { - tmp = (uint8[i2] << 16 & 16711680) + (uint8[i2 + 1] << 8 & 65280) + (uint8[i2 + 2] & 255); - output.push(tripletToBase64(tmp)); - } - return output.join(""); - } - function fromByteArray(uint8) { - var tmp; - var len2 = uint8.length; - var extraBytes = len2 % 3; - var parts = []; - var maxChunkLength = 16383; - for (var i2 = 0, len22 = len2 - extraBytes; i2 < len22; i2 += maxChunkLength) { - parts.push(encodeChunk(uint8, i2, i2 + maxChunkLength > len22 ? len22 : i2 + maxChunkLength)); - } - if (extraBytes === 1) { - tmp = uint8[len2 - 1]; - parts.push( - lookup[tmp >> 2] + lookup[tmp << 4 & 63] + "==" - ); - } else if (extraBytes === 2) { - tmp = (uint8[len2 - 2] << 8) + uint8[len2 - 1]; - parts.push( - lookup[tmp >> 10] + lookup[tmp >> 4 & 63] + lookup[tmp << 2 & 63] + "=" - ); - } - return parts.join(""); - } - } -}); - -// node_modules/.pnpm/ieee754@1.2.1/node_modules/ieee754/index.js -var require_ieee754 = __commonJS({ - "node_modules/.pnpm/ieee754@1.2.1/node_modules/ieee754/index.js"(exports2) { - init_polyfill_buffer(); - exports2.read = function(buffer2, offset, isLE, mLen, nBytes) { - var e, m; - var eLen = nBytes * 8 - mLen - 1; - var eMax = (1 << eLen) - 1; - var eBias = eMax >> 1; - var nBits = -7; - var i = isLE ? nBytes - 1 : 0; - var d = isLE ? -1 : 1; - var s = buffer2[offset + i]; - i += d; - e = s & (1 << -nBits) - 1; - s >>= -nBits; - nBits += eLen; - for (; nBits > 0; e = e * 256 + buffer2[offset + i], i += d, nBits -= 8) { - } - m = e & (1 << -nBits) - 1; - e >>= -nBits; - nBits += mLen; - for (; nBits > 0; m = m * 256 + buffer2[offset + i], i += d, nBits -= 8) { - } - if (e === 0) { - e = 1 - eBias; - } else if (e === eMax) { - return m ? NaN : (s ? -1 : 1) * Infinity; - } else { - m = m + Math.pow(2, mLen); - e = e - eBias; - } - return (s ? -1 : 1) * m * Math.pow(2, e - mLen); - }; - exports2.write = function(buffer2, value, offset, isLE, mLen, nBytes) { - var e, m, c; - var eLen = nBytes * 8 - mLen - 1; - var eMax = (1 << eLen) - 1; - var eBias = eMax >> 1; - var rt = mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0; - var i = isLE ? 0 : nBytes - 1; - var d = isLE ? 1 : -1; - var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0; - value = Math.abs(value); - if (isNaN(value) || value === Infinity) { - m = isNaN(value) ? 1 : 0; - e = eMax; - } else { - e = Math.floor(Math.log(value) / Math.LN2); - if (value * (c = Math.pow(2, -e)) < 1) { - e--; - c *= 2; - } - if (e + eBias >= 1) { - value += rt / c; - } else { - value += rt * Math.pow(2, 1 - eBias); - } - if (value * c >= 2) { - e++; - c /= 2; - } - if (e + eBias >= eMax) { - m = 0; - e = eMax; - } else if (e + eBias >= 1) { - m = (value * c - 1) * Math.pow(2, mLen); - e = e + eBias; - } else { - m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen); - e = 0; - } - } - for (; mLen >= 8; buffer2[offset + i] = m & 255, i += d, m /= 256, mLen -= 8) { - } - e = e << mLen | m; - eLen += mLen; - for (; eLen > 0; buffer2[offset + i] = e & 255, i += d, e /= 256, eLen -= 8) { - } - buffer2[offset + i - d] |= s * 128; - }; - } -}); - -// node_modules/.pnpm/buffer@6.0.3/node_modules/buffer/index.js -var require_buffer = __commonJS({ - "node_modules/.pnpm/buffer@6.0.3/node_modules/buffer/index.js"(exports2) { - "use strict"; - init_polyfill_buffer(); - var base64 = require_base64_js(); - var ieee754 = require_ieee754(); - var customInspectSymbol = typeof Symbol === "function" && typeof Symbol["for"] === "function" ? Symbol["for"]("nodejs.util.inspect.custom") : null; - exports2.Buffer = Buffer2; - exports2.SlowBuffer = SlowBuffer; - exports2.INSPECT_MAX_BYTES = 50; - var K_MAX_LENGTH = 2147483647; - exports2.kMaxLength = K_MAX_LENGTH; - Buffer2.TYPED_ARRAY_SUPPORT = typedArraySupport(); - if (!Buffer2.TYPED_ARRAY_SUPPORT && typeof console !== "undefined" && typeof console.error === "function") { - console.error( - "This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support." - ); - } - function typedArraySupport() { - try { - const arr = new Uint8Array(1); - const proto = { foo: function() { - return 42; - } }; - Object.setPrototypeOf(proto, Uint8Array.prototype); - Object.setPrototypeOf(arr, proto); - return arr.foo() === 42; - } catch (e) { - return false; - } - } - Object.defineProperty(Buffer2.prototype, "parent", { - enumerable: true, - get: function() { - if (!Buffer2.isBuffer(this)) - return void 0; - return this.buffer; - } - }); - Object.defineProperty(Buffer2.prototype, "offset", { - enumerable: true, - get: function() { - if (!Buffer2.isBuffer(this)) - return void 0; - return this.byteOffset; - } - }); - function createBuffer(length) { - if (length > K_MAX_LENGTH) { - throw new RangeError('The value "' + length + '" is invalid for option "size"'); - } - const buf = new Uint8Array(length); - Object.setPrototypeOf(buf, Buffer2.prototype); - return buf; - } - function Buffer2(arg, encodingOrOffset, length) { - if (typeof arg === "number") { - if (typeof encodingOrOffset === "string") { - throw new TypeError( - 'The "string" argument must be of type string. Received type number' - ); - } - return allocUnsafe(arg); - } - return from(arg, encodingOrOffset, length); - } - Buffer2.poolSize = 8192; - function from(value, encodingOrOffset, length) { - if (typeof value === "string") { - return fromString2(value, encodingOrOffset); - } - if (ArrayBuffer.isView(value)) { - return fromArrayView(value); - } - if (value == null) { - throw new TypeError( - "The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type " + typeof value - ); - } - if (isInstance(value, ArrayBuffer) || value && isInstance(value.buffer, ArrayBuffer)) { - return fromArrayBuffer(value, encodingOrOffset, length); - } - if (typeof SharedArrayBuffer !== "undefined" && (isInstance(value, SharedArrayBuffer) || value && isInstance(value.buffer, SharedArrayBuffer))) { - return fromArrayBuffer(value, encodingOrOffset, length); - } - if (typeof value === "number") { - throw new TypeError( - 'The "value" argument must not be of type number. Received type number' - ); - } - const valueOf = value.valueOf && value.valueOf(); - if (valueOf != null && valueOf !== value) { - return Buffer2.from(valueOf, encodingOrOffset, length); - } - const b = fromObject(value); - if (b) - return b; - if (typeof Symbol !== "undefined" && Symbol.toPrimitive != null && typeof value[Symbol.toPrimitive] === "function") { - return Buffer2.from(value[Symbol.toPrimitive]("string"), encodingOrOffset, length); - } - throw new TypeError( - "The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type " + typeof value - ); - } - Buffer2.from = function(value, encodingOrOffset, length) { - return from(value, encodingOrOffset, length); - }; - Object.setPrototypeOf(Buffer2.prototype, Uint8Array.prototype); - Object.setPrototypeOf(Buffer2, Uint8Array); - function assertSize(size) { - if (typeof size !== "number") { - throw new TypeError('"size" argument must be of type number'); - } else if (size < 0) { - throw new RangeError('The value "' + size + '" is invalid for option "size"'); - } - } - function alloc(size, fill, encoding) { - assertSize(size); - if (size <= 0) { - return createBuffer(size); - } - if (fill !== void 0) { - return typeof encoding === "string" ? createBuffer(size).fill(fill, encoding) : createBuffer(size).fill(fill); - } - return createBuffer(size); - } - Buffer2.alloc = function(size, fill, encoding) { - return alloc(size, fill, encoding); - }; - function allocUnsafe(size) { - assertSize(size); - return createBuffer(size < 0 ? 0 : checked(size) | 0); - } - Buffer2.allocUnsafe = function(size) { - return allocUnsafe(size); - }; - Buffer2.allocUnsafeSlow = function(size) { - return allocUnsafe(size); - }; - function fromString2(string, encoding) { - if (typeof encoding !== "string" || encoding === "") { - encoding = "utf8"; - } - if (!Buffer2.isEncoding(encoding)) { - throw new TypeError("Unknown encoding: " + encoding); - } - const length = byteLength(string, encoding) | 0; - let buf = createBuffer(length); - const actual = buf.write(string, encoding); - if (actual !== length) { - buf = buf.slice(0, actual); - } - return buf; - } - function fromArrayLike(array) { - const length = array.length < 0 ? 0 : checked(array.length) | 0; - const buf = createBuffer(length); - for (let i = 0; i < length; i += 1) { - buf[i] = array[i] & 255; - } - return buf; - } - function fromArrayView(arrayView) { - if (isInstance(arrayView, Uint8Array)) { - const copy2 = new Uint8Array(arrayView); - return fromArrayBuffer(copy2.buffer, copy2.byteOffset, copy2.byteLength); - } - return fromArrayLike(arrayView); - } - function fromArrayBuffer(array, byteOffset, length) { - if (byteOffset < 0 || array.byteLength < byteOffset) { - throw new RangeError('"offset" is outside of buffer bounds'); - } - if (array.byteLength < byteOffset + (length || 0)) { - throw new RangeError('"length" is outside of buffer bounds'); - } - let buf; - if (byteOffset === void 0 && length === void 0) { - buf = new Uint8Array(array); - } else if (length === void 0) { - buf = new Uint8Array(array, byteOffset); - } else { - buf = new Uint8Array(array, byteOffset, length); - } - Object.setPrototypeOf(buf, Buffer2.prototype); - return buf; - } - function fromObject(obj) { - if (Buffer2.isBuffer(obj)) { - const len = checked(obj.length) | 0; - const buf = createBuffer(len); - if (buf.length === 0) { - return buf; - } - obj.copy(buf, 0, 0, len); - return buf; - } - if (obj.length !== void 0) { - if (typeof obj.length !== "number" || numberIsNaN(obj.length)) { - return createBuffer(0); - } - return fromArrayLike(obj); - } - if (obj.type === "Buffer" && Array.isArray(obj.data)) { - return fromArrayLike(obj.data); - } - } - function checked(length) { - if (length >= K_MAX_LENGTH) { - throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x" + K_MAX_LENGTH.toString(16) + " bytes"); - } - return length | 0; - } - function SlowBuffer(length) { - if (+length != length) { - length = 0; - } - return Buffer2.alloc(+length); - } - Buffer2.isBuffer = function isBuffer(b) { - return b != null && b._isBuffer === true && b !== Buffer2.prototype; - }; - Buffer2.compare = function compare(a, b) { - if (isInstance(a, Uint8Array)) - a = Buffer2.from(a, a.offset, a.byteLength); - if (isInstance(b, Uint8Array)) - b = Buffer2.from(b, b.offset, b.byteLength); - if (!Buffer2.isBuffer(a) || !Buffer2.isBuffer(b)) { - throw new TypeError( - 'The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array' - ); - } - if (a === b) - return 0; - let x = a.length; - let y = b.length; - for (let i = 0, len = Math.min(x, y); i < len; ++i) { - if (a[i] !== b[i]) { - x = a[i]; - y = b[i]; - break; - } - } - if (x < y) - return -1; - if (y < x) - return 1; - return 0; - }; - Buffer2.isEncoding = function isEncoding(encoding) { - switch (String(encoding).toLowerCase()) { - case "hex": - case "utf8": - case "utf-8": - case "ascii": - case "latin1": - case "binary": - case "base64": - case "ucs2": - case "ucs-2": - case "utf16le": - case "utf-16le": - return true; - default: - return false; - } - }; - Buffer2.concat = function concat(list, length) { - if (!Array.isArray(list)) { - throw new TypeError('"list" argument must be an Array of Buffers'); - } - if (list.length === 0) { - return Buffer2.alloc(0); - } - let i; - if (length === void 0) { - length = 0; - for (i = 0; i < list.length; ++i) { - length += list[i].length; - } - } - const buffer2 = Buffer2.allocUnsafe(length); - let pos = 0; - for (i = 0; i < list.length; ++i) { - let buf = list[i]; - if (isInstance(buf, Uint8Array)) { - if (pos + buf.length > buffer2.length) { - if (!Buffer2.isBuffer(buf)) - buf = Buffer2.from(buf); - buf.copy(buffer2, pos); - } else { - Uint8Array.prototype.set.call( - buffer2, - buf, - pos - ); - } - } else if (!Buffer2.isBuffer(buf)) { - throw new TypeError('"list" argument must be an Array of Buffers'); - } else { - buf.copy(buffer2, pos); - } - pos += buf.length; - } - return buffer2; - }; - function byteLength(string, encoding) { - if (Buffer2.isBuffer(string)) { - return string.length; - } - if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) { - return string.byteLength; - } - if (typeof string !== "string") { - throw new TypeError( - 'The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type ' + typeof string - ); - } - const len = string.length; - const mustMatch = arguments.length > 2 && arguments[2] === true; - if (!mustMatch && len === 0) - return 0; - let loweredCase = false; - for (; ; ) { - switch (encoding) { - case "ascii": - case "latin1": - case "binary": - return len; - case "utf8": - case "utf-8": - return utf8ToBytes(string).length; - case "ucs2": - case "ucs-2": - case "utf16le": - case "utf-16le": - return len * 2; - case "hex": - return len >>> 1; - case "base64": - return base64ToBytes(string).length; - default: - if (loweredCase) { - return mustMatch ? -1 : utf8ToBytes(string).length; - } - encoding = ("" + encoding).toLowerCase(); - loweredCase = true; - } - } - } - Buffer2.byteLength = byteLength; - function slowToString(encoding, start, end) { - let loweredCase = false; - if (start === void 0 || start < 0) { - start = 0; - } - if (start > this.length) { - return ""; - } - if (end === void 0 || end > this.length) { - end = this.length; - } - if (end <= 0) { - return ""; - } - end >>>= 0; - start >>>= 0; - if (end <= start) { - return ""; - } - if (!encoding) - encoding = "utf8"; - while (true) { - switch (encoding) { - case "hex": - return hexSlice(this, start, end); - case "utf8": - case "utf-8": - return utf8Slice(this, start, end); - case "ascii": - return asciiSlice(this, start, end); - case "latin1": - case "binary": - return latin1Slice(this, start, end); - case "base64": - return base64Slice(this, start, end); - case "ucs2": - case "ucs-2": - case "utf16le": - case "utf-16le": - return utf16leSlice(this, start, end); - default: - if (loweredCase) - throw new TypeError("Unknown encoding: " + encoding); - encoding = (encoding + "").toLowerCase(); - loweredCase = true; - } - } - } - Buffer2.prototype._isBuffer = true; - function swap(b, n, m) { - const i = b[n]; - b[n] = b[m]; - b[m] = i; - } - Buffer2.prototype.swap16 = function swap16() { - const len = this.length; - if (len % 2 !== 0) { - throw new RangeError("Buffer size must be a multiple of 16-bits"); - } - for (let i = 0; i < len; i += 2) { - swap(this, i, i + 1); - } - return this; - }; - Buffer2.prototype.swap32 = function swap32() { - const len = this.length; - if (len % 4 !== 0) { - throw new RangeError("Buffer size must be a multiple of 32-bits"); - } - for (let i = 0; i < len; i += 4) { - swap(this, i, i + 3); - swap(this, i + 1, i + 2); - } - return this; - }; - Buffer2.prototype.swap64 = function swap64() { - const len = this.length; - if (len % 8 !== 0) { - throw new RangeError("Buffer size must be a multiple of 64-bits"); - } - for (let i = 0; i < len; i += 8) { - swap(this, i, i + 7); - swap(this, i + 1, i + 6); - swap(this, i + 2, i + 5); - swap(this, i + 3, i + 4); - } - return this; - }; - Buffer2.prototype.toString = function toString() { - const length = this.length; - if (length === 0) - return ""; - if (arguments.length === 0) - return utf8Slice(this, 0, length); - return slowToString.apply(this, arguments); - }; - Buffer2.prototype.toLocaleString = Buffer2.prototype.toString; - Buffer2.prototype.equals = function equals3(b) { - if (!Buffer2.isBuffer(b)) - throw new TypeError("Argument must be a Buffer"); - if (this === b) - return true; - return Buffer2.compare(this, b) === 0; - }; - Buffer2.prototype.inspect = function inspect() { - let str = ""; - const max = exports2.INSPECT_MAX_BYTES; - str = this.toString("hex", 0, max).replace(/(.{2})/g, "$1 ").trim(); - if (this.length > max) - str += " ... "; - return ""; - }; - if (customInspectSymbol) { - Buffer2.prototype[customInspectSymbol] = Buffer2.prototype.inspect; - } - Buffer2.prototype.compare = function compare(target, start, end, thisStart, thisEnd) { - if (isInstance(target, Uint8Array)) { - target = Buffer2.from(target, target.offset, target.byteLength); - } - if (!Buffer2.isBuffer(target)) { - throw new TypeError( - 'The "target" argument must be one of type Buffer or Uint8Array. Received type ' + typeof target - ); - } - if (start === void 0) { - start = 0; - } - if (end === void 0) { - end = target ? target.length : 0; - } - if (thisStart === void 0) { - thisStart = 0; - } - if (thisEnd === void 0) { - thisEnd = this.length; - } - if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) { - throw new RangeError("out of range index"); - } - if (thisStart >= thisEnd && start >= end) { - return 0; - } - if (thisStart >= thisEnd) { - return -1; - } - if (start >= end) { - return 1; - } - start >>>= 0; - end >>>= 0; - thisStart >>>= 0; - thisEnd >>>= 0; - if (this === target) - return 0; - let x = thisEnd - thisStart; - let y = end - start; - const len = Math.min(x, y); - const thisCopy = this.slice(thisStart, thisEnd); - const targetCopy = target.slice(start, end); - for (let i = 0; i < len; ++i) { - if (thisCopy[i] !== targetCopy[i]) { - x = thisCopy[i]; - y = targetCopy[i]; - break; - } - } - if (x < y) - return -1; - if (y < x) - return 1; - return 0; - }; - function bidirectionalIndexOf(buffer2, val, byteOffset, encoding, dir) { - if (buffer2.length === 0) - return -1; - if (typeof byteOffset === "string") { - encoding = byteOffset; - byteOffset = 0; - } else if (byteOffset > 2147483647) { - byteOffset = 2147483647; - } else if (byteOffset < -2147483648) { - byteOffset = -2147483648; - } - byteOffset = +byteOffset; - if (numberIsNaN(byteOffset)) { - byteOffset = dir ? 0 : buffer2.length - 1; - } - if (byteOffset < 0) - byteOffset = buffer2.length + byteOffset; - if (byteOffset >= buffer2.length) { - if (dir) - return -1; - else - byteOffset = buffer2.length - 1; - } else if (byteOffset < 0) { - if (dir) - byteOffset = 0; - else - return -1; - } - if (typeof val === "string") { - val = Buffer2.from(val, encoding); - } - if (Buffer2.isBuffer(val)) { - if (val.length === 0) { - return -1; - } - return arrayIndexOf(buffer2, val, byteOffset, encoding, dir); - } else if (typeof val === "number") { - val = val & 255; - if (typeof Uint8Array.prototype.indexOf === "function") { - if (dir) { - return Uint8Array.prototype.indexOf.call(buffer2, val, byteOffset); - } else { - return Uint8Array.prototype.lastIndexOf.call(buffer2, val, byteOffset); - } - } - return arrayIndexOf(buffer2, [val], byteOffset, encoding, dir); - } - throw new TypeError("val must be string, number or Buffer"); - } - function arrayIndexOf(arr, val, byteOffset, encoding, dir) { - let indexSize = 1; - let arrLength = arr.length; - let valLength = val.length; - if (encoding !== void 0) { - encoding = String(encoding).toLowerCase(); - if (encoding === "ucs2" || encoding === "ucs-2" || encoding === "utf16le" || encoding === "utf-16le") { - if (arr.length < 2 || val.length < 2) { - return -1; - } - indexSize = 2; - arrLength /= 2; - valLength /= 2; - byteOffset /= 2; - } - } - function read(buf, i2) { - if (indexSize === 1) { - return buf[i2]; - } else { - return buf.readUInt16BE(i2 * indexSize); - } - } - let i; - if (dir) { - let foundIndex = -1; - for (i = byteOffset; i < arrLength; i++) { - if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) { - if (foundIndex === -1) - foundIndex = i; - if (i - foundIndex + 1 === valLength) - return foundIndex * indexSize; - } else { - if (foundIndex !== -1) - i -= i - foundIndex; - foundIndex = -1; - } - } - } else { - if (byteOffset + valLength > arrLength) - byteOffset = arrLength - valLength; - for (i = byteOffset; i >= 0; i--) { - let found = true; - for (let j = 0; j < valLength; j++) { - if (read(arr, i + j) !== read(val, j)) { - found = false; - break; - } - } - if (found) - return i; - } - } - return -1; - } - Buffer2.prototype.includes = function includes(val, byteOffset, encoding) { - return this.indexOf(val, byteOffset, encoding) !== -1; - }; - Buffer2.prototype.indexOf = function indexOf(val, byteOffset, encoding) { - return bidirectionalIndexOf(this, val, byteOffset, encoding, true); - }; - Buffer2.prototype.lastIndexOf = function lastIndexOf(val, byteOffset, encoding) { - return bidirectionalIndexOf(this, val, byteOffset, encoding, false); - }; - function hexWrite(buf, string, offset, length) { - offset = Number(offset) || 0; - const remaining = buf.length - offset; - if (!length) { - length = remaining; - } else { - length = Number(length); - if (length > remaining) { - length = remaining; - } - } - const strLen = string.length; - if (length > strLen / 2) { - length = strLen / 2; - } - let i; - for (i = 0; i < length; ++i) { - const parsed = parseInt(string.substr(i * 2, 2), 16); - if (numberIsNaN(parsed)) - return i; - buf[offset + i] = parsed; - } - return i; - } - function utf8Write(buf, string, offset, length) { - return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length); - } - function asciiWrite(buf, string, offset, length) { - return blitBuffer(asciiToBytes(string), buf, offset, length); - } - function base64Write(buf, string, offset, length) { - return blitBuffer(base64ToBytes(string), buf, offset, length); - } - function ucs2Write(buf, string, offset, length) { - return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length); - } - Buffer2.prototype.write = function write(string, offset, length, encoding) { - if (offset === void 0) { - encoding = "utf8"; - length = this.length; - offset = 0; - } else if (length === void 0 && typeof offset === "string") { - encoding = offset; - length = this.length; - offset = 0; - } else if (isFinite(offset)) { - offset = offset >>> 0; - if (isFinite(length)) { - length = length >>> 0; - if (encoding === void 0) - encoding = "utf8"; - } else { - encoding = length; - length = void 0; - } - } else { - throw new Error( - "Buffer.write(string, encoding, offset[, length]) is no longer supported" - ); - } - const remaining = this.length - offset; - if (length === void 0 || length > remaining) - length = remaining; - if (string.length > 0 && (length < 0 || offset < 0) || offset > this.length) { - throw new RangeError("Attempt to write outside buffer bounds"); - } - if (!encoding) - encoding = "utf8"; - let loweredCase = false; - for (; ; ) { - switch (encoding) { - case "hex": - return hexWrite(this, string, offset, length); - case "utf8": - case "utf-8": - return utf8Write(this, string, offset, length); - case "ascii": - case "latin1": - case "binary": - return asciiWrite(this, string, offset, length); - case "base64": - return base64Write(this, string, offset, length); - case "ucs2": - case "ucs-2": - case "utf16le": - case "utf-16le": - return ucs2Write(this, string, offset, length); - default: - if (loweredCase) - throw new TypeError("Unknown encoding: " + encoding); - encoding = ("" + encoding).toLowerCase(); - loweredCase = true; - } - } - }; - Buffer2.prototype.toJSON = function toJSON() { - return { - type: "Buffer", - data: Array.prototype.slice.call(this._arr || this, 0) - }; - }; - function base64Slice(buf, start, end) { - if (start === 0 && end === buf.length) { - return base64.fromByteArray(buf); - } else { - return base64.fromByteArray(buf.slice(start, end)); - } - } - function utf8Slice(buf, start, end) { - end = Math.min(buf.length, end); - const res = []; - let i = start; - while (i < end) { - const firstByte = buf[i]; - let codePoint = null; - let bytesPerSequence = firstByte > 239 ? 4 : firstByte > 223 ? 3 : firstByte > 191 ? 2 : 1; - if (i + bytesPerSequence <= end) { - let secondByte, thirdByte, fourthByte, tempCodePoint; - switch (bytesPerSequence) { - case 1: - if (firstByte < 128) { - codePoint = firstByte; - } - break; - case 2: - secondByte = buf[i + 1]; - if ((secondByte & 192) === 128) { - tempCodePoint = (firstByte & 31) << 6 | secondByte & 63; - if (tempCodePoint > 127) { - codePoint = tempCodePoint; - } - } - break; - case 3: - secondByte = buf[i + 1]; - thirdByte = buf[i + 2]; - if ((secondByte & 192) === 128 && (thirdByte & 192) === 128) { - tempCodePoint = (firstByte & 15) << 12 | (secondByte & 63) << 6 | thirdByte & 63; - if (tempCodePoint > 2047 && (tempCodePoint < 55296 || tempCodePoint > 57343)) { - codePoint = tempCodePoint; - } - } - break; - case 4: - secondByte = buf[i + 1]; - thirdByte = buf[i + 2]; - fourthByte = buf[i + 3]; - if ((secondByte & 192) === 128 && (thirdByte & 192) === 128 && (fourthByte & 192) === 128) { - tempCodePoint = (firstByte & 15) << 18 | (secondByte & 63) << 12 | (thirdByte & 63) << 6 | fourthByte & 63; - if (tempCodePoint > 65535 && tempCodePoint < 1114112) { - codePoint = tempCodePoint; - } - } - } - } - if (codePoint === null) { - codePoint = 65533; - bytesPerSequence = 1; - } else if (codePoint > 65535) { - codePoint -= 65536; - res.push(codePoint >>> 10 & 1023 | 55296); - codePoint = 56320 | codePoint & 1023; - } - res.push(codePoint); - i += bytesPerSequence; - } - return decodeCodePointsArray(res); - } - var MAX_ARGUMENTS_LENGTH = 4096; - function decodeCodePointsArray(codePoints) { - const len = codePoints.length; - if (len <= MAX_ARGUMENTS_LENGTH) { - return String.fromCharCode.apply(String, codePoints); - } - let res = ""; - let i = 0; - while (i < len) { - res += String.fromCharCode.apply( - String, - codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH) - ); - } - return res; - } - function asciiSlice(buf, start, end) { - let ret = ""; - end = Math.min(buf.length, end); - for (let i = start; i < end; ++i) { - ret += String.fromCharCode(buf[i] & 127); - } - return ret; - } - function latin1Slice(buf, start, end) { - let ret = ""; - end = Math.min(buf.length, end); - for (let i = start; i < end; ++i) { - ret += String.fromCharCode(buf[i]); - } - return ret; - } - function hexSlice(buf, start, end) { - const len = buf.length; - if (!start || start < 0) - start = 0; - if (!end || end < 0 || end > len) - end = len; - let out = ""; - for (let i = start; i < end; ++i) { - out += hexSliceLookupTable[buf[i]]; - } - return out; - } - function utf16leSlice(buf, start, end) { - const bytes = buf.slice(start, end); - let res = ""; - for (let i = 0; i < bytes.length - 1; i += 2) { - res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256); - } - return res; - } - Buffer2.prototype.slice = function slice(start, end) { - const len = this.length; - start = ~~start; - end = end === void 0 ? len : ~~end; - if (start < 0) { - start += len; - if (start < 0) - start = 0; - } else if (start > len) { - start = len; - } - if (end < 0) { - end += len; - if (end < 0) - end = 0; - } else if (end > len) { - end = len; - } - if (end < start) - end = start; - const newBuf = this.subarray(start, end); - Object.setPrototypeOf(newBuf, Buffer2.prototype); - return newBuf; - }; - function checkOffset(offset, ext, length) { - if (offset % 1 !== 0 || offset < 0) - throw new RangeError("offset is not uint"); - if (offset + ext > length) - throw new RangeError("Trying to access beyond buffer length"); - } - Buffer2.prototype.readUintLE = Buffer2.prototype.readUIntLE = function readUIntLE(offset, byteLength2, noAssert) { - offset = offset >>> 0; - byteLength2 = byteLength2 >>> 0; - if (!noAssert) - checkOffset(offset, byteLength2, this.length); - let val = this[offset]; - let mul = 1; - let i = 0; - while (++i < byteLength2 && (mul *= 256)) { - val += this[offset + i] * mul; - } - return val; - }; - Buffer2.prototype.readUintBE = Buffer2.prototype.readUIntBE = function readUIntBE(offset, byteLength2, noAssert) { - offset = offset >>> 0; - byteLength2 = byteLength2 >>> 0; - if (!noAssert) { - checkOffset(offset, byteLength2, this.length); - } - let val = this[offset + --byteLength2]; - let mul = 1; - while (byteLength2 > 0 && (mul *= 256)) { - val += this[offset + --byteLength2] * mul; - } - return val; - }; - Buffer2.prototype.readUint8 = Buffer2.prototype.readUInt8 = function readUInt8(offset, noAssert) { - offset = offset >>> 0; - if (!noAssert) - checkOffset(offset, 1, this.length); - return this[offset]; - }; - Buffer2.prototype.readUint16LE = Buffer2.prototype.readUInt16LE = function readUInt16LE(offset, noAssert) { - offset = offset >>> 0; - if (!noAssert) - checkOffset(offset, 2, this.length); - return this[offset] | this[offset + 1] << 8; - }; - Buffer2.prototype.readUint16BE = Buffer2.prototype.readUInt16BE = function readUInt16BE(offset, noAssert) { - offset = offset >>> 0; - if (!noAssert) - checkOffset(offset, 2, this.length); - return this[offset] << 8 | this[offset + 1]; - }; - Buffer2.prototype.readUint32LE = Buffer2.prototype.readUInt32LE = function readUInt32LE(offset, noAssert) { - offset = offset >>> 0; - if (!noAssert) - checkOffset(offset, 4, this.length); - return (this[offset] | this[offset + 1] << 8 | this[offset + 2] << 16) + this[offset + 3] * 16777216; - }; - Buffer2.prototype.readUint32BE = Buffer2.prototype.readUInt32BE = function readUInt32BE(offset, noAssert) { - offset = offset >>> 0; - if (!noAssert) - checkOffset(offset, 4, this.length); - return this[offset] * 16777216 + (this[offset + 1] << 16 | this[offset + 2] << 8 | this[offset + 3]); - }; - Buffer2.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE(offset) { - offset = offset >>> 0; - validateNumber(offset, "offset"); - const first2 = this[offset]; - const last2 = this[offset + 7]; - if (first2 === void 0 || last2 === void 0) { - boundsError(offset, this.length - 8); - } - const lo = first2 + this[++offset] * 2 ** 8 + this[++offset] * 2 ** 16 + this[++offset] * 2 ** 24; - const hi = this[++offset] + this[++offset] * 2 ** 8 + this[++offset] * 2 ** 16 + last2 * 2 ** 24; - return BigInt(lo) + (BigInt(hi) << BigInt(32)); - }); - Buffer2.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE(offset) { - offset = offset >>> 0; - validateNumber(offset, "offset"); - const first2 = this[offset]; - const last2 = this[offset + 7]; - if (first2 === void 0 || last2 === void 0) { - boundsError(offset, this.length - 8); - } - const hi = first2 * 2 ** 24 + this[++offset] * 2 ** 16 + this[++offset] * 2 ** 8 + this[++offset]; - const lo = this[++offset] * 2 ** 24 + this[++offset] * 2 ** 16 + this[++offset] * 2 ** 8 + last2; - return (BigInt(hi) << BigInt(32)) + BigInt(lo); - }); - Buffer2.prototype.readIntLE = function readIntLE(offset, byteLength2, noAssert) { - offset = offset >>> 0; - byteLength2 = byteLength2 >>> 0; - if (!noAssert) - checkOffset(offset, byteLength2, this.length); - let val = this[offset]; - let mul = 1; - let i = 0; - while (++i < byteLength2 && (mul *= 256)) { - val += this[offset + i] * mul; - } - mul *= 128; - if (val >= mul) - val -= Math.pow(2, 8 * byteLength2); - return val; - }; - Buffer2.prototype.readIntBE = function readIntBE(offset, byteLength2, noAssert) { - offset = offset >>> 0; - byteLength2 = byteLength2 >>> 0; - if (!noAssert) - checkOffset(offset, byteLength2, this.length); - let i = byteLength2; - let mul = 1; - let val = this[offset + --i]; - while (i > 0 && (mul *= 256)) { - val += this[offset + --i] * mul; - } - mul *= 128; - if (val >= mul) - val -= Math.pow(2, 8 * byteLength2); - return val; - }; - Buffer2.prototype.readInt8 = function readInt8(offset, noAssert) { - offset = offset >>> 0; - if (!noAssert) - checkOffset(offset, 1, this.length); - if (!(this[offset] & 128)) - return this[offset]; - return (255 - this[offset] + 1) * -1; - }; - Buffer2.prototype.readInt16LE = function readInt16LE(offset, noAssert) { - offset = offset >>> 0; - if (!noAssert) - checkOffset(offset, 2, this.length); - const val = this[offset] | this[offset + 1] << 8; - return val & 32768 ? val | 4294901760 : val; - }; - Buffer2.prototype.readInt16BE = function readInt16BE(offset, noAssert) { - offset = offset >>> 0; - if (!noAssert) - checkOffset(offset, 2, this.length); - const val = this[offset + 1] | this[offset] << 8; - return val & 32768 ? val | 4294901760 : val; - }; - Buffer2.prototype.readInt32LE = function readInt32LE(offset, noAssert) { - offset = offset >>> 0; - if (!noAssert) - checkOffset(offset, 4, this.length); - return this[offset] | this[offset + 1] << 8 | this[offset + 2] << 16 | this[offset + 3] << 24; - }; - Buffer2.prototype.readInt32BE = function readInt32BE(offset, noAssert) { - offset = offset >>> 0; - if (!noAssert) - checkOffset(offset, 4, this.length); - return this[offset] << 24 | this[offset + 1] << 16 | this[offset + 2] << 8 | this[offset + 3]; - }; - Buffer2.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE(offset) { - offset = offset >>> 0; - validateNumber(offset, "offset"); - const first2 = this[offset]; - const last2 = this[offset + 7]; - if (first2 === void 0 || last2 === void 0) { - boundsError(offset, this.length - 8); - } - const val = this[offset + 4] + this[offset + 5] * 2 ** 8 + this[offset + 6] * 2 ** 16 + (last2 << 24); - return (BigInt(val) << BigInt(32)) + BigInt(first2 + this[++offset] * 2 ** 8 + this[++offset] * 2 ** 16 + this[++offset] * 2 ** 24); - }); - Buffer2.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE(offset) { - offset = offset >>> 0; - validateNumber(offset, "offset"); - const first2 = this[offset]; - const last2 = this[offset + 7]; - if (first2 === void 0 || last2 === void 0) { - boundsError(offset, this.length - 8); - } - const val = (first2 << 24) + // Overflow - this[++offset] * 2 ** 16 + this[++offset] * 2 ** 8 + this[++offset]; - return (BigInt(val) << BigInt(32)) + BigInt(this[++offset] * 2 ** 24 + this[++offset] * 2 ** 16 + this[++offset] * 2 ** 8 + last2); - }); - Buffer2.prototype.readFloatLE = function readFloatLE(offset, noAssert) { - offset = offset >>> 0; - if (!noAssert) - checkOffset(offset, 4, this.length); - return ieee754.read(this, offset, true, 23, 4); - }; - Buffer2.prototype.readFloatBE = function readFloatBE(offset, noAssert) { - offset = offset >>> 0; - if (!noAssert) - checkOffset(offset, 4, this.length); - return ieee754.read(this, offset, false, 23, 4); - }; - Buffer2.prototype.readDoubleLE = function readDoubleLE(offset, noAssert) { - offset = offset >>> 0; - if (!noAssert) - checkOffset(offset, 8, this.length); - return ieee754.read(this, offset, true, 52, 8); - }; - Buffer2.prototype.readDoubleBE = function readDoubleBE(offset, noAssert) { - offset = offset >>> 0; - if (!noAssert) - checkOffset(offset, 8, this.length); - return ieee754.read(this, offset, false, 52, 8); - }; - function checkInt(buf, value, offset, ext, max, min) { - if (!Buffer2.isBuffer(buf)) - throw new TypeError('"buffer" argument must be a Buffer instance'); - if (value > max || value < min) - throw new RangeError('"value" argument is out of bounds'); - if (offset + ext > buf.length) - throw new RangeError("Index out of range"); - } - Buffer2.prototype.writeUintLE = Buffer2.prototype.writeUIntLE = function writeUIntLE(value, offset, byteLength2, noAssert) { - value = +value; - offset = offset >>> 0; - byteLength2 = byteLength2 >>> 0; - if (!noAssert) { - const maxBytes = Math.pow(2, 8 * byteLength2) - 1; - checkInt(this, value, offset, byteLength2, maxBytes, 0); - } - let mul = 1; - let i = 0; - this[offset] = value & 255; - while (++i < byteLength2 && (mul *= 256)) { - this[offset + i] = value / mul & 255; - } - return offset + byteLength2; - }; - Buffer2.prototype.writeUintBE = Buffer2.prototype.writeUIntBE = function writeUIntBE(value, offset, byteLength2, noAssert) { - value = +value; - offset = offset >>> 0; - byteLength2 = byteLength2 >>> 0; - if (!noAssert) { - const maxBytes = Math.pow(2, 8 * byteLength2) - 1; - checkInt(this, value, offset, byteLength2, maxBytes, 0); - } - let i = byteLength2 - 1; - let mul = 1; - this[offset + i] = value & 255; - while (--i >= 0 && (mul *= 256)) { - this[offset + i] = value / mul & 255; - } - return offset + byteLength2; - }; - Buffer2.prototype.writeUint8 = Buffer2.prototype.writeUInt8 = function writeUInt8(value, offset, noAssert) { - value = +value; - offset = offset >>> 0; - if (!noAssert) - checkInt(this, value, offset, 1, 255, 0); - this[offset] = value & 255; - return offset + 1; - }; - Buffer2.prototype.writeUint16LE = Buffer2.prototype.writeUInt16LE = function writeUInt16LE(value, offset, noAssert) { - value = +value; - offset = offset >>> 0; - if (!noAssert) - checkInt(this, value, offset, 2, 65535, 0); - this[offset] = value & 255; - this[offset + 1] = value >>> 8; - return offset + 2; - }; - Buffer2.prototype.writeUint16BE = Buffer2.prototype.writeUInt16BE = function writeUInt16BE(value, offset, noAssert) { - value = +value; - offset = offset >>> 0; - if (!noAssert) - checkInt(this, value, offset, 2, 65535, 0); - this[offset] = value >>> 8; - this[offset + 1] = value & 255; - return offset + 2; - }; - Buffer2.prototype.writeUint32LE = Buffer2.prototype.writeUInt32LE = function writeUInt32LE(value, offset, noAssert) { - value = +value; - offset = offset >>> 0; - if (!noAssert) - checkInt(this, value, offset, 4, 4294967295, 0); - this[offset + 3] = value >>> 24; - this[offset + 2] = value >>> 16; - this[offset + 1] = value >>> 8; - this[offset] = value & 255; - return offset + 4; - }; - Buffer2.prototype.writeUint32BE = Buffer2.prototype.writeUInt32BE = function writeUInt32BE(value, offset, noAssert) { - value = +value; - offset = offset >>> 0; - if (!noAssert) - checkInt(this, value, offset, 4, 4294967295, 0); - this[offset] = value >>> 24; - this[offset + 1] = value >>> 16; - this[offset + 2] = value >>> 8; - this[offset + 3] = value & 255; - return offset + 4; - }; - function wrtBigUInt64LE(buf, value, offset, min, max) { - checkIntBI(value, min, max, buf, offset, 7); - let lo = Number(value & BigInt(4294967295)); - buf[offset++] = lo; - lo = lo >> 8; - buf[offset++] = lo; - lo = lo >> 8; - buf[offset++] = lo; - lo = lo >> 8; - buf[offset++] = lo; - let hi = Number(value >> BigInt(32) & BigInt(4294967295)); - buf[offset++] = hi; - hi = hi >> 8; - buf[offset++] = hi; - hi = hi >> 8; - buf[offset++] = hi; - hi = hi >> 8; - buf[offset++] = hi; - return offset; - } - function wrtBigUInt64BE(buf, value, offset, min, max) { - checkIntBI(value, min, max, buf, offset, 7); - let lo = Number(value & BigInt(4294967295)); - buf[offset + 7] = lo; - lo = lo >> 8; - buf[offset + 6] = lo; - lo = lo >> 8; - buf[offset + 5] = lo; - lo = lo >> 8; - buf[offset + 4] = lo; - let hi = Number(value >> BigInt(32) & BigInt(4294967295)); - buf[offset + 3] = hi; - hi = hi >> 8; - buf[offset + 2] = hi; - hi = hi >> 8; - buf[offset + 1] = hi; - hi = hi >> 8; - buf[offset] = hi; - return offset + 8; - } - Buffer2.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE(value, offset = 0) { - return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt("0xffffffffffffffff")); - }); - Buffer2.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE(value, offset = 0) { - return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt("0xffffffffffffffff")); - }); - Buffer2.prototype.writeIntLE = function writeIntLE(value, offset, byteLength2, noAssert) { - value = +value; - offset = offset >>> 0; - if (!noAssert) { - const limit = Math.pow(2, 8 * byteLength2 - 1); - checkInt(this, value, offset, byteLength2, limit - 1, -limit); - } - let i = 0; - let mul = 1; - let sub = 0; - this[offset] = value & 255; - while (++i < byteLength2 && (mul *= 256)) { - if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) { - sub = 1; - } - this[offset + i] = (value / mul >> 0) - sub & 255; - } - return offset + byteLength2; - }; - Buffer2.prototype.writeIntBE = function writeIntBE(value, offset, byteLength2, noAssert) { - value = +value; - offset = offset >>> 0; - if (!noAssert) { - const limit = Math.pow(2, 8 * byteLength2 - 1); - checkInt(this, value, offset, byteLength2, limit - 1, -limit); - } - let i = byteLength2 - 1; - let mul = 1; - let sub = 0; - this[offset + i] = value & 255; - while (--i >= 0 && (mul *= 256)) { - if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) { - sub = 1; - } - this[offset + i] = (value / mul >> 0) - sub & 255; - } - return offset + byteLength2; - }; - Buffer2.prototype.writeInt8 = function writeInt8(value, offset, noAssert) { - value = +value; - offset = offset >>> 0; - if (!noAssert) - checkInt(this, value, offset, 1, 127, -128); - if (value < 0) - value = 255 + value + 1; - this[offset] = value & 255; - return offset + 1; - }; - Buffer2.prototype.writeInt16LE = function writeInt16LE(value, offset, noAssert) { - value = +value; - offset = offset >>> 0; - if (!noAssert) - checkInt(this, value, offset, 2, 32767, -32768); - this[offset] = value & 255; - this[offset + 1] = value >>> 8; - return offset + 2; - }; - Buffer2.prototype.writeInt16BE = function writeInt16BE(value, offset, noAssert) { - value = +value; - offset = offset >>> 0; - if (!noAssert) - checkInt(this, value, offset, 2, 32767, -32768); - this[offset] = value >>> 8; - this[offset + 1] = value & 255; - return offset + 2; - }; - Buffer2.prototype.writeInt32LE = function writeInt32LE(value, offset, noAssert) { - value = +value; - offset = offset >>> 0; - if (!noAssert) - checkInt(this, value, offset, 4, 2147483647, -2147483648); - this[offset] = value & 255; - this[offset + 1] = value >>> 8; - this[offset + 2] = value >>> 16; - this[offset + 3] = value >>> 24; - return offset + 4; - }; - Buffer2.prototype.writeInt32BE = function writeInt32BE(value, offset, noAssert) { - value = +value; - offset = offset >>> 0; - if (!noAssert) - checkInt(this, value, offset, 4, 2147483647, -2147483648); - if (value < 0) - value = 4294967295 + value + 1; - this[offset] = value >>> 24; - this[offset + 1] = value >>> 16; - this[offset + 2] = value >>> 8; - this[offset + 3] = value & 255; - return offset + 4; - }; - Buffer2.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE(value, offset = 0) { - return wrtBigUInt64LE(this, value, offset, -BigInt("0x8000000000000000"), BigInt("0x7fffffffffffffff")); - }); - Buffer2.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE(value, offset = 0) { - return wrtBigUInt64BE(this, value, offset, -BigInt("0x8000000000000000"), BigInt("0x7fffffffffffffff")); - }); - function checkIEEE754(buf, value, offset, ext, max, min) { - if (offset + ext > buf.length) - throw new RangeError("Index out of range"); - if (offset < 0) - throw new RangeError("Index out of range"); - } - function writeFloat(buf, value, offset, littleEndian, noAssert) { - value = +value; - offset = offset >>> 0; - if (!noAssert) { - checkIEEE754(buf, value, offset, 4, 34028234663852886e22, -34028234663852886e22); - } - ieee754.write(buf, value, offset, littleEndian, 23, 4); - return offset + 4; - } - Buffer2.prototype.writeFloatLE = function writeFloatLE(value, offset, noAssert) { - return writeFloat(this, value, offset, true, noAssert); - }; - Buffer2.prototype.writeFloatBE = function writeFloatBE(value, offset, noAssert) { - return writeFloat(this, value, offset, false, noAssert); - }; - function writeDouble(buf, value, offset, littleEndian, noAssert) { - value = +value; - offset = offset >>> 0; - if (!noAssert) { - checkIEEE754(buf, value, offset, 8, 17976931348623157e292, -17976931348623157e292); - } - ieee754.write(buf, value, offset, littleEndian, 52, 8); - return offset + 8; - } - Buffer2.prototype.writeDoubleLE = function writeDoubleLE(value, offset, noAssert) { - return writeDouble(this, value, offset, true, noAssert); - }; - Buffer2.prototype.writeDoubleBE = function writeDoubleBE(value, offset, noAssert) { - return writeDouble(this, value, offset, false, noAssert); - }; - Buffer2.prototype.copy = function copy2(target, targetStart, start, end) { - if (!Buffer2.isBuffer(target)) - throw new TypeError("argument should be a Buffer"); - if (!start) - start = 0; - if (!end && end !== 0) - end = this.length; - if (targetStart >= target.length) - targetStart = target.length; - if (!targetStart) - targetStart = 0; - if (end > 0 && end < start) - end = start; - if (end === start) - return 0; - if (target.length === 0 || this.length === 0) - return 0; - if (targetStart < 0) { - throw new RangeError("targetStart out of bounds"); - } - if (start < 0 || start >= this.length) - throw new RangeError("Index out of range"); - if (end < 0) - throw new RangeError("sourceEnd out of bounds"); - if (end > this.length) - end = this.length; - if (target.length - targetStart < end - start) { - end = target.length - targetStart + start; - } - const len = end - start; - if (this === target && typeof Uint8Array.prototype.copyWithin === "function") { - this.copyWithin(targetStart, start, end); - } else { - Uint8Array.prototype.set.call( - target, - this.subarray(start, end), - targetStart - ); - } - return len; - }; - Buffer2.prototype.fill = function fill(val, start, end, encoding) { - if (typeof val === "string") { - if (typeof start === "string") { - encoding = start; - start = 0; - end = this.length; - } else if (typeof end === "string") { - encoding = end; - end = this.length; - } - if (encoding !== void 0 && typeof encoding !== "string") { - throw new TypeError("encoding must be a string"); - } - if (typeof encoding === "string" && !Buffer2.isEncoding(encoding)) { - throw new TypeError("Unknown encoding: " + encoding); - } - if (val.length === 1) { - const code = val.charCodeAt(0); - if (encoding === "utf8" && code < 128 || encoding === "latin1") { - val = code; - } - } - } else if (typeof val === "number") { - val = val & 255; - } else if (typeof val === "boolean") { - val = Number(val); - } - if (start < 0 || this.length < start || this.length < end) { - throw new RangeError("Out of range index"); - } - if (end <= start) { - return this; - } - start = start >>> 0; - end = end === void 0 ? this.length : end >>> 0; - if (!val) - val = 0; - let i; - if (typeof val === "number") { - for (i = start; i < end; ++i) { - this[i] = val; - } - } else { - const bytes = Buffer2.isBuffer(val) ? val : Buffer2.from(val, encoding); - const len = bytes.length; - if (len === 0) { - throw new TypeError('The value "' + val + '" is invalid for argument "value"'); - } - for (i = 0; i < end - start; ++i) { - this[i + start] = bytes[i % len]; - } - } - return this; - }; - var errors = {}; - function E(sym, getMessage, Base) { - errors[sym] = class NodeError extends Base { - constructor() { - super(); - Object.defineProperty(this, "message", { - value: getMessage.apply(this, arguments), - writable: true, - configurable: true - }); - this.name = `${this.name} [${sym}]`; - this.stack; - delete this.name; - } - get code() { - return sym; - } - set code(value) { - Object.defineProperty(this, "code", { - configurable: true, - enumerable: true, - value, - writable: true - }); - } - toString() { - return `${this.name} [${sym}]: ${this.message}`; - } - }; - } - E( - "ERR_BUFFER_OUT_OF_BOUNDS", - function(name) { - if (name) { - return `${name} is outside of buffer bounds`; - } - return "Attempt to access memory outside buffer bounds"; - }, - RangeError - ); - E( - "ERR_INVALID_ARG_TYPE", - function(name, actual) { - return `The "${name}" argument must be of type number. Received type ${typeof actual}`; - }, - TypeError - ); - E( - "ERR_OUT_OF_RANGE", - function(str, range, input) { - let msg = `The value of "${str}" is out of range.`; - let received = input; - if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) { - received = addNumericalSeparator(String(input)); - } else if (typeof input === "bigint") { - received = String(input); - if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) { - received = addNumericalSeparator(received); - } - received += "n"; - } - msg += ` It must be ${range}. Received ${received}`; - return msg; - }, - RangeError - ); - function addNumericalSeparator(val) { - let res = ""; - let i = val.length; - const start = val[0] === "-" ? 1 : 0; - for (; i >= start + 4; i -= 3) { - res = `_${val.slice(i - 3, i)}${res}`; - } - return `${val.slice(0, i)}${res}`; - } - function checkBounds(buf, offset, byteLength2) { - validateNumber(offset, "offset"); - if (buf[offset] === void 0 || buf[offset + byteLength2] === void 0) { - boundsError(offset, buf.length - (byteLength2 + 1)); - } - } - function checkIntBI(value, min, max, buf, offset, byteLength2) { - if (value > max || value < min) { - const n = typeof min === "bigint" ? "n" : ""; - let range; - if (byteLength2 > 3) { - if (min === 0 || min === BigInt(0)) { - range = `>= 0${n} and < 2${n} ** ${(byteLength2 + 1) * 8}${n}`; - } else { - range = `>= -(2${n} ** ${(byteLength2 + 1) * 8 - 1}${n}) and < 2 ** ${(byteLength2 + 1) * 8 - 1}${n}`; - } - } else { - range = `>= ${min}${n} and <= ${max}${n}`; - } - throw new errors.ERR_OUT_OF_RANGE("value", range, value); - } - checkBounds(buf, offset, byteLength2); - } - function validateNumber(value, name) { - if (typeof value !== "number") { - throw new errors.ERR_INVALID_ARG_TYPE(name, "number", value); - } - } - function boundsError(value, length, type) { - if (Math.floor(value) !== value) { - validateNumber(value, type); - throw new errors.ERR_OUT_OF_RANGE(type || "offset", "an integer", value); - } - if (length < 0) { - throw new errors.ERR_BUFFER_OUT_OF_BOUNDS(); - } - throw new errors.ERR_OUT_OF_RANGE( - type || "offset", - `>= ${type ? 1 : 0} and <= ${length}`, - value - ); - } - var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g; - function base64clean(str) { - str = str.split("=")[0]; - str = str.trim().replace(INVALID_BASE64_RE, ""); - if (str.length < 2) - return ""; - while (str.length % 4 !== 0) { - str = str + "="; - } - return str; - } - function utf8ToBytes(string, units) { - units = units || Infinity; - let codePoint; - const length = string.length; - let leadSurrogate = null; - const bytes = []; - for (let i = 0; i < length; ++i) { - codePoint = string.charCodeAt(i); - if (codePoint > 55295 && codePoint < 57344) { - if (!leadSurrogate) { - if (codePoint > 56319) { - if ((units -= 3) > -1) - bytes.push(239, 191, 189); - continue; - } else if (i + 1 === length) { - if ((units -= 3) > -1) - bytes.push(239, 191, 189); - continue; - } - leadSurrogate = codePoint; - continue; - } - if (codePoint < 56320) { - if ((units -= 3) > -1) - bytes.push(239, 191, 189); - leadSurrogate = codePoint; - continue; - } - codePoint = (leadSurrogate - 55296 << 10 | codePoint - 56320) + 65536; - } else if (leadSurrogate) { - if ((units -= 3) > -1) - bytes.push(239, 191, 189); - } - leadSurrogate = null; - if (codePoint < 128) { - if ((units -= 1) < 0) - break; - bytes.push(codePoint); - } else if (codePoint < 2048) { - if ((units -= 2) < 0) - break; - bytes.push( - codePoint >> 6 | 192, - codePoint & 63 | 128 - ); - } else if (codePoint < 65536) { - if ((units -= 3) < 0) - break; - bytes.push( - codePoint >> 12 | 224, - codePoint >> 6 & 63 | 128, - codePoint & 63 | 128 - ); - } else if (codePoint < 1114112) { - if ((units -= 4) < 0) - break; - bytes.push( - codePoint >> 18 | 240, - codePoint >> 12 & 63 | 128, - codePoint >> 6 & 63 | 128, - codePoint & 63 | 128 - ); - } else { - throw new Error("Invalid code point"); - } - } - return bytes; - } - function asciiToBytes(str) { - const byteArray = []; - for (let i = 0; i < str.length; ++i) { - byteArray.push(str.charCodeAt(i) & 255); - } - return byteArray; - } - function utf16leToBytes(str, units) { - let c, hi, lo; - const byteArray = []; - for (let i = 0; i < str.length; ++i) { - if ((units -= 2) < 0) - break; - c = str.charCodeAt(i); - hi = c >> 8; - lo = c % 256; - byteArray.push(lo); - byteArray.push(hi); - } - return byteArray; - } - function base64ToBytes(str) { - return base64.toByteArray(base64clean(str)); - } - function blitBuffer(src, dst, offset, length) { - let i; - for (i = 0; i < length; ++i) { - if (i + offset >= dst.length || i >= src.length) - break; - dst[i + offset] = src[i]; - } - return i; - } - function isInstance(obj, type) { - return obj instanceof type || obj != null && obj.constructor != null && obj.constructor.name != null && obj.constructor.name === type.name; - } - function numberIsNaN(obj) { - return obj !== obj; - } - var hexSliceLookupTable = function() { - const alphabet = "0123456789abcdef"; - const table = new Array(256); - for (let i = 0; i < 16; ++i) { - const i16 = i * 16; - for (let j = 0; j < 16; ++j) { - table[i16 + j] = alphabet[i] + alphabet[j]; - } - } - return table; - }(); - function defineBigIntMethod(fn) { - return typeof BigInt === "undefined" ? BufferBigIntNotDefined : fn; - } - function BufferBigIntNotDefined() { - throw new Error("BigInt not supported"); - } - } -}); - -// polyfill_buffer.js -var import_obsidian, buffer, Buffer; -var init_polyfill_buffer = __esm({ - "polyfill_buffer.js"() { - import_obsidian = require("obsidian"); - if (import_obsidian.Platform.isMobileApp) { - buffer = require_buffer().Buffer; - } else { - buffer = global.Buffer; - } - Buffer = buffer; - } -}); - -// node_modules/.pnpm/async-lock@1.4.1/node_modules/async-lock/lib/index.js -var require_lib = __commonJS({ - "node_modules/.pnpm/async-lock@1.4.1/node_modules/async-lock/lib/index.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - var AsyncLock2 = function(opts) { - opts = opts || {}; - this.Promise = opts.Promise || Promise; - this.queues = /* @__PURE__ */ Object.create(null); - this.domainReentrant = opts.domainReentrant || false; - if (this.domainReentrant) { - if (typeof process === "undefined" || typeof process.domain === "undefined") { - throw new Error( - "Domain-reentrant locks require `process.domain` to exist. Please flip `opts.domainReentrant = false`, use a NodeJS version that still implements Domain, or install a browser polyfill." - ); - } - this.domains = /* @__PURE__ */ Object.create(null); - } - this.timeout = opts.timeout || AsyncLock2.DEFAULT_TIMEOUT; - this.maxOccupationTime = opts.maxOccupationTime || AsyncLock2.DEFAULT_MAX_OCCUPATION_TIME; - this.maxExecutionTime = opts.maxExecutionTime || AsyncLock2.DEFAULT_MAX_EXECUTION_TIME; - if (opts.maxPending === Infinity || Number.isInteger(opts.maxPending) && opts.maxPending >= 0) { - this.maxPending = opts.maxPending; - } else { - this.maxPending = AsyncLock2.DEFAULT_MAX_PENDING; - } - }; - AsyncLock2.DEFAULT_TIMEOUT = 0; - AsyncLock2.DEFAULT_MAX_OCCUPATION_TIME = 0; - AsyncLock2.DEFAULT_MAX_EXECUTION_TIME = 0; - AsyncLock2.DEFAULT_MAX_PENDING = 1e3; - AsyncLock2.prototype.acquire = function(key2, fn, cb, opts) { - if (Array.isArray(key2)) { - return this._acquireBatch(key2, fn, cb, opts); - } - if (typeof fn !== "function") { - throw new Error("You must pass a function to execute"); - } - var deferredResolve = null; - var deferredReject = null; - var deferred2 = null; - if (typeof cb !== "function") { - opts = cb; - cb = null; - deferred2 = new this.Promise(function(resolve, reject) { - deferredResolve = resolve; - deferredReject = reject; - }); - } - opts = opts || {}; - var resolved = false; - var timer = null; - var occupationTimer = null; - var executionTimer = null; - var self2 = this; - var done = function(locked, err, ret) { - if (occupationTimer) { - clearTimeout(occupationTimer); - occupationTimer = null; - } - if (executionTimer) { - clearTimeout(executionTimer); - executionTimer = null; - } - if (locked) { - if (!!self2.queues[key2] && self2.queues[key2].length === 0) { - delete self2.queues[key2]; - } - if (self2.domainReentrant) { - delete self2.domains[key2]; - } - } - if (!resolved) { - if (!deferred2) { - if (typeof cb === "function") { - cb(err, ret); - } - } else { - if (err) { - deferredReject(err); - } else { - deferredResolve(ret); - } - } - resolved = true; - } - if (locked) { - if (!!self2.queues[key2] && self2.queues[key2].length > 0) { - self2.queues[key2].shift()(); - } - } - }; - var exec = function(locked) { - if (resolved) { - return done(locked); - } - if (timer) { - clearTimeout(timer); - timer = null; - } - if (self2.domainReentrant && locked) { - self2.domains[key2] = process.domain; - } - var maxExecutionTime = opts.maxExecutionTime || self2.maxExecutionTime; - if (maxExecutionTime) { - executionTimer = setTimeout(function() { - if (!!self2.queues[key2]) { - done(locked, new Error("Maximum execution time is exceeded " + key2)); - } - }, maxExecutionTime); - } - if (fn.length === 1) { - var called = false; - try { - fn(function(err, ret) { - if (!called) { - called = true; - done(locked, err, ret); - } - }); - } catch (err) { - if (!called) { - called = true; - done(locked, err); - } - } - } else { - self2._promiseTry(function() { - return fn(); - }).then(function(ret) { - done(locked, void 0, ret); - }, function(error) { - done(locked, error); - }); - } - }; - if (self2.domainReentrant && !!process.domain) { - exec = process.domain.bind(exec); - } - var maxPending = opts.maxPending || self2.maxPending; - if (!self2.queues[key2]) { - self2.queues[key2] = []; - exec(true); - } else if (self2.domainReentrant && !!process.domain && process.domain === self2.domains[key2]) { - exec(false); - } else if (self2.queues[key2].length >= maxPending) { - done(false, new Error("Too many pending tasks in queue " + key2)); - } else { - var taskFn = function() { - exec(true); - }; - if (opts.skipQueue) { - self2.queues[key2].unshift(taskFn); - } else { - self2.queues[key2].push(taskFn); - } - var timeout = opts.timeout || self2.timeout; - if (timeout) { - timer = setTimeout(function() { - timer = null; - done(false, new Error("async-lock timed out in queue " + key2)); - }, timeout); - } - } - var maxOccupationTime = opts.maxOccupationTime || self2.maxOccupationTime; - if (maxOccupationTime) { - occupationTimer = setTimeout(function() { - if (!!self2.queues[key2]) { - done(false, new Error("Maximum occupation time is exceeded in queue " + key2)); - } - }, maxOccupationTime); - } - if (deferred2) { - return deferred2; - } - }; - AsyncLock2.prototype._acquireBatch = function(keys, fn, cb, opts) { - if (typeof cb !== "function") { - opts = cb; - cb = null; - } - var self2 = this; - var getFn = function(key2, fn2) { - return function(cb2) { - self2.acquire(key2, fn2, cb2, opts); - }; - }; - var fnx = keys.reduceRight(function(prev, key2) { - return getFn(key2, prev); - }, fn); - if (typeof cb === "function") { - fnx(cb); - } else { - return new this.Promise(function(resolve, reject) { - if (fnx.length === 1) { - fnx(function(err, ret) { - if (err) { - reject(err); - } else { - resolve(ret); - } - }); - } else { - resolve(fnx()); - } - }); - } - }; - AsyncLock2.prototype.isBusy = function(key2) { - if (!key2) { - return Object.keys(this.queues).length > 0; - } else { - return !!this.queues[key2]; - } - }; - AsyncLock2.prototype._promiseTry = function(fn) { - try { - return this.Promise.resolve(fn()); - } catch (e) { - return this.Promise.reject(e); - } - }; - module2.exports = AsyncLock2; - } -}); - -// node_modules/.pnpm/async-lock@1.4.1/node_modules/async-lock/index.js -var require_async_lock = __commonJS({ - "node_modules/.pnpm/async-lock@1.4.1/node_modules/async-lock/index.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - module2.exports = require_lib(); - } -}); - -// node_modules/.pnpm/inherits@2.0.4/node_modules/inherits/inherits_browser.js -var require_inherits_browser = __commonJS({ - "node_modules/.pnpm/inherits@2.0.4/node_modules/inherits/inherits_browser.js"(exports2, module2) { - init_polyfill_buffer(); - if (typeof Object.create === "function") { - module2.exports = function inherits(ctor, superCtor) { - if (superCtor) { - ctor.super_ = superCtor; - ctor.prototype = Object.create(superCtor.prototype, { - constructor: { - value: ctor, - enumerable: false, - writable: true, - configurable: true - } - }); - } - }; - } else { - module2.exports = function inherits(ctor, superCtor) { - if (superCtor) { - ctor.super_ = superCtor; - var TempCtor = function() { - }; - TempCtor.prototype = superCtor.prototype; - ctor.prototype = new TempCtor(); - ctor.prototype.constructor = ctor; - } - }; - } - } -}); - -// node_modules/.pnpm/safe-buffer@5.2.1/node_modules/safe-buffer/index.js -var require_safe_buffer = __commonJS({ - "node_modules/.pnpm/safe-buffer@5.2.1/node_modules/safe-buffer/index.js"(exports2, module2) { - init_polyfill_buffer(); - var buffer2 = require_buffer(); - var Buffer2 = buffer2.Buffer; - function copyProps(src, dst) { - for (var key2 in src) { - dst[key2] = src[key2]; - } - } - if (Buffer2.from && Buffer2.alloc && Buffer2.allocUnsafe && Buffer2.allocUnsafeSlow) { - module2.exports = buffer2; - } else { - copyProps(buffer2, exports2); - exports2.Buffer = SafeBuffer; - } - function SafeBuffer(arg, encodingOrOffset, length) { - return Buffer2(arg, encodingOrOffset, length); - } - SafeBuffer.prototype = Object.create(Buffer2.prototype); - copyProps(Buffer2, SafeBuffer); - SafeBuffer.from = function(arg, encodingOrOffset, length) { - if (typeof arg === "number") { - throw new TypeError("Argument must not be a number"); - } - return Buffer2(arg, encodingOrOffset, length); - }; - SafeBuffer.alloc = function(size, fill, encoding) { - if (typeof size !== "number") { - throw new TypeError("Argument must be a number"); - } - var buf = Buffer2(size); - if (fill !== void 0) { - if (typeof encoding === "string") { - buf.fill(fill, encoding); - } else { - buf.fill(fill); - } - } else { - buf.fill(0); - } - return buf; - }; - SafeBuffer.allocUnsafe = function(size) { - if (typeof size !== "number") { - throw new TypeError("Argument must be a number"); - } - return Buffer2(size); - }; - SafeBuffer.allocUnsafeSlow = function(size) { - if (typeof size !== "number") { - throw new TypeError("Argument must be a number"); - } - return buffer2.SlowBuffer(size); - }; - } -}); - -// node_modules/.pnpm/sha.js@2.4.11/node_modules/sha.js/hash.js -var require_hash = __commonJS({ - "node_modules/.pnpm/sha.js@2.4.11/node_modules/sha.js/hash.js"(exports2, module2) { - init_polyfill_buffer(); - var Buffer2 = require_safe_buffer().Buffer; - function Hash2(blockSize, finalSize) { - this._block = Buffer2.alloc(blockSize); - this._finalSize = finalSize; - this._blockSize = blockSize; - this._len = 0; - } - Hash2.prototype.update = function(data, enc) { - if (typeof data === "string") { - enc = enc || "utf8"; - data = Buffer2.from(data, enc); - } - var block = this._block; - var blockSize = this._blockSize; - var length = data.length; - var accum = this._len; - for (var offset = 0; offset < length; ) { - var assigned = accum % blockSize; - var remainder = Math.min(length - offset, blockSize - assigned); - for (var i = 0; i < remainder; i++) { - block[assigned + i] = data[offset + i]; - } - accum += remainder; - offset += remainder; - if (accum % blockSize === 0) { - this._update(block); - } - } - this._len += length; - return this; - }; - Hash2.prototype.digest = function(enc) { - var rem = this._len % this._blockSize; - this._block[rem] = 128; - this._block.fill(0, rem + 1); - if (rem >= this._finalSize) { - this._update(this._block); - this._block.fill(0); - } - var bits = this._len * 8; - if (bits <= 4294967295) { - this._block.writeUInt32BE(bits, this._blockSize - 4); - } else { - var lowBits = (bits & 4294967295) >>> 0; - var highBits = (bits - lowBits) / 4294967296; - this._block.writeUInt32BE(highBits, this._blockSize - 8); - this._block.writeUInt32BE(lowBits, this._blockSize - 4); - } - this._update(this._block); - var hash2 = this._hash(); - return enc ? hash2.toString(enc) : hash2; - }; - Hash2.prototype._update = function() { - throw new Error("_update must be implemented by subclass"); - }; - module2.exports = Hash2; - } -}); - -// node_modules/.pnpm/sha.js@2.4.11/node_modules/sha.js/sha1.js -var require_sha1 = __commonJS({ - "node_modules/.pnpm/sha.js@2.4.11/node_modules/sha.js/sha1.js"(exports2, module2) { - init_polyfill_buffer(); - var inherits = require_inherits_browser(); - var Hash2 = require_hash(); - var Buffer2 = require_safe_buffer().Buffer; - var K2 = [ - 1518500249, - 1859775393, - 2400959708 | 0, - 3395469782 | 0 - ]; - var W = new Array(80); - function Sha1() { - this.init(); - this._w = W; - Hash2.call(this, 64, 56); - } - inherits(Sha1, Hash2); - Sha1.prototype.init = function() { - this._a = 1732584193; - this._b = 4023233417; - this._c = 2562383102; - this._d = 271733878; - this._e = 3285377520; - return this; - }; - function rotl1(num2) { - return num2 << 1 | num2 >>> 31; - } - function rotl5(num2) { - return num2 << 5 | num2 >>> 27; - } - function rotl30(num2) { - return num2 << 30 | num2 >>> 2; - } - function ft(s, b, c, d) { - if (s === 0) - return b & c | ~b & d; - if (s === 2) - return b & c | b & d | c & d; - return b ^ c ^ d; - } - Sha1.prototype._update = function(M) { - var W2 = this._w; - var a = this._a | 0; - var b = this._b | 0; - var c = this._c | 0; - var d = this._d | 0; - var e = this._e | 0; - for (var i = 0; i < 16; ++i) - W2[i] = M.readInt32BE(i * 4); - for (; i < 80; ++i) - W2[i] = rotl1(W2[i - 3] ^ W2[i - 8] ^ W2[i - 14] ^ W2[i - 16]); - for (var j = 0; j < 80; ++j) { - var s = ~~(j / 20); - var t = rotl5(a) + ft(s, b, c, d) + e + W2[j] + K2[s] | 0; - e = d; - d = c; - c = rotl30(b); - b = a; - a = t; - } - this._a = a + this._a | 0; - this._b = b + this._b | 0; - this._c = c + this._c | 0; - this._d = d + this._d | 0; - this._e = e + this._e | 0; - }; - Sha1.prototype._hash = function() { - var H = Buffer2.allocUnsafe(20); - H.writeInt32BE(this._a | 0, 0); - H.writeInt32BE(this._b | 0, 4); - H.writeInt32BE(this._c | 0, 8); - H.writeInt32BE(this._d | 0, 12); - H.writeInt32BE(this._e | 0, 16); - return H; - }; - module2.exports = Sha1; - } -}); - -// node_modules/.pnpm/crc-32@1.2.2/node_modules/crc-32/crc32.js -var require_crc32 = __commonJS({ - "node_modules/.pnpm/crc-32@1.2.2/node_modules/crc-32/crc32.js"(exports2) { - init_polyfill_buffer(); - var CRC32; - (function(factory) { - if (typeof DO_NOT_EXPORT_CRC === "undefined") { - if ("object" === typeof exports2) { - factory(exports2); - } else if ("function" === typeof define && define.amd) { - define(function() { - var module3 = {}; - factory(module3); - return module3; - }); - } else { - factory(CRC32 = {}); - } - } else { - factory(CRC32 = {}); - } - })(function(CRC322) { - CRC322.version = "1.2.2"; - function signed_crc_table() { - var c = 0, table = new Array(256); - for (var n = 0; n != 256; ++n) { - c = n; - c = c & 1 ? -306674912 ^ c >>> 1 : c >>> 1; - c = c & 1 ? -306674912 ^ c >>> 1 : c >>> 1; - c = c & 1 ? -306674912 ^ c >>> 1 : c >>> 1; - c = c & 1 ? -306674912 ^ c >>> 1 : c >>> 1; - c = c & 1 ? -306674912 ^ c >>> 1 : c >>> 1; - c = c & 1 ? -306674912 ^ c >>> 1 : c >>> 1; - c = c & 1 ? -306674912 ^ c >>> 1 : c >>> 1; - c = c & 1 ? -306674912 ^ c >>> 1 : c >>> 1; - table[n] = c; - } - return typeof Int32Array !== "undefined" ? new Int32Array(table) : table; - } - var T0 = signed_crc_table(); - function slice_by_16_tables(T) { - var c = 0, v = 0, n = 0, table = typeof Int32Array !== "undefined" ? new Int32Array(4096) : new Array(4096); - for (n = 0; n != 256; ++n) - table[n] = T[n]; - for (n = 0; n != 256; ++n) { - v = T[n]; - for (c = 256 + n; c < 4096; c += 256) - v = table[c] = v >>> 8 ^ T[v & 255]; - } - var out = []; - for (n = 1; n != 16; ++n) - out[n - 1] = typeof Int32Array !== "undefined" ? table.subarray(n * 256, n * 256 + 256) : table.slice(n * 256, n * 256 + 256); - return out; - } - var TT = slice_by_16_tables(T0); - var T1 = TT[0], T2 = TT[1], T3 = TT[2], T4 = TT[3], T5 = TT[4]; - var T6 = TT[5], T7 = TT[6], T8 = TT[7], T9 = TT[8], Ta = TT[9]; - var Tb = TT[10], Tc = TT[11], Td = TT[12], Te = TT[13], Tf = TT[14]; - function crc32_bstr(bstr, seed) { - var C = seed ^ -1; - for (var i = 0, L = bstr.length; i < L; ) - C = C >>> 8 ^ T0[(C ^ bstr.charCodeAt(i++)) & 255]; - return ~C; - } - function crc32_buf(B, seed) { - var C = seed ^ -1, L = B.length - 15, i = 0; - for (; i < L; ) - C = Tf[B[i++] ^ C & 255] ^ Te[B[i++] ^ C >> 8 & 255] ^ Td[B[i++] ^ C >> 16 & 255] ^ Tc[B[i++] ^ C >>> 24] ^ Tb[B[i++]] ^ Ta[B[i++]] ^ T9[B[i++]] ^ T8[B[i++]] ^ T7[B[i++]] ^ T6[B[i++]] ^ T5[B[i++]] ^ T4[B[i++]] ^ T3[B[i++]] ^ T2[B[i++]] ^ T1[B[i++]] ^ T0[B[i++]]; - L += 15; - while (i < L) - C = C >>> 8 ^ T0[(C ^ B[i++]) & 255]; - return ~C; - } - function crc32_str(str, seed) { - var C = seed ^ -1; - for (var i = 0, L = str.length, c = 0, d = 0; i < L; ) { - c = str.charCodeAt(i++); - if (c < 128) { - C = C >>> 8 ^ T0[(C ^ c) & 255]; - } else if (c < 2048) { - C = C >>> 8 ^ T0[(C ^ (192 | c >> 6 & 31)) & 255]; - C = C >>> 8 ^ T0[(C ^ (128 | c & 63)) & 255]; - } else if (c >= 55296 && c < 57344) { - c = (c & 1023) + 64; - d = str.charCodeAt(i++) & 1023; - C = C >>> 8 ^ T0[(C ^ (240 | c >> 8 & 7)) & 255]; - C = C >>> 8 ^ T0[(C ^ (128 | c >> 2 & 63)) & 255]; - C = C >>> 8 ^ T0[(C ^ (128 | d >> 6 & 15 | (c & 3) << 4)) & 255]; - C = C >>> 8 ^ T0[(C ^ (128 | d & 63)) & 255]; - } else { - C = C >>> 8 ^ T0[(C ^ (224 | c >> 12 & 15)) & 255]; - C = C >>> 8 ^ T0[(C ^ (128 | c >> 6 & 63)) & 255]; - C = C >>> 8 ^ T0[(C ^ (128 | c & 63)) & 255]; - } - } - return ~C; - } - CRC322.table = T0; - CRC322.bstr = crc32_bstr; - CRC322.buf = crc32_buf; - CRC322.str = crc32_str; - }); - } -}); - -// node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/utils/common.js -var require_common = __commonJS({ - "node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/utils/common.js"(exports2) { - "use strict"; - init_polyfill_buffer(); - var TYPED_OK = typeof Uint8Array !== "undefined" && typeof Uint16Array !== "undefined" && typeof Int32Array !== "undefined"; - function _has(obj, key2) { - return Object.prototype.hasOwnProperty.call(obj, key2); - } - exports2.assign = function(obj) { - var sources = Array.prototype.slice.call(arguments, 1); - while (sources.length) { - var source = sources.shift(); - if (!source) { - continue; - } - if (typeof source !== "object") { - throw new TypeError(source + "must be non-object"); - } - for (var p in source) { - if (_has(source, p)) { - obj[p] = source[p]; - } - } - } - return obj; - }; - exports2.shrinkBuf = function(buf, size) { - if (buf.length === size) { - return buf; - } - if (buf.subarray) { - return buf.subarray(0, size); - } - buf.length = size; - return buf; - }; - var fnTyped = { - arraySet: function(dest, src, src_offs, len, dest_offs) { - if (src.subarray && dest.subarray) { - dest.set(src.subarray(src_offs, src_offs + len), dest_offs); - return; - } - for (var i = 0; i < len; i++) { - dest[dest_offs + i] = src[src_offs + i]; - } - }, - // Join array of chunks to single array. - flattenChunks: function(chunks) { - var i, l, len, pos, chunk, result; - len = 0; - for (i = 0, l = chunks.length; i < l; i++) { - len += chunks[i].length; - } - result = new Uint8Array(len); - pos = 0; - for (i = 0, l = chunks.length; i < l; i++) { - chunk = chunks[i]; - result.set(chunk, pos); - pos += chunk.length; - } - return result; - } - }; - var fnUntyped = { - arraySet: function(dest, src, src_offs, len, dest_offs) { - for (var i = 0; i < len; i++) { - dest[dest_offs + i] = src[src_offs + i]; - } - }, - // Join array of chunks to single array. - flattenChunks: function(chunks) { - return [].concat.apply([], chunks); - } - }; - exports2.setTyped = function(on) { - if (on) { - exports2.Buf8 = Uint8Array; - exports2.Buf16 = Uint16Array; - exports2.Buf32 = Int32Array; - exports2.assign(exports2, fnTyped); - } else { - exports2.Buf8 = Array; - exports2.Buf16 = Array; - exports2.Buf32 = Array; - exports2.assign(exports2, fnUntyped); - } - }; - exports2.setTyped(TYPED_OK); - } -}); - -// node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/trees.js -var require_trees = __commonJS({ - "node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/trees.js"(exports2) { - "use strict"; - init_polyfill_buffer(); - var utils = require_common(); - var Z_FIXED = 4; - var Z_BINARY = 0; - var Z_TEXT = 1; - var Z_UNKNOWN = 2; - function zero(buf) { - var len = buf.length; - while (--len >= 0) { - buf[len] = 0; - } - } - var STORED_BLOCK = 0; - var STATIC_TREES = 1; - var DYN_TREES = 2; - var MIN_MATCH = 3; - var MAX_MATCH = 258; - var LENGTH_CODES = 29; - var LITERALS = 256; - var L_CODES = LITERALS + 1 + LENGTH_CODES; - var D_CODES = 30; - var BL_CODES = 19; - var HEAP_SIZE = 2 * L_CODES + 1; - var MAX_BITS = 15; - var Buf_size = 16; - var MAX_BL_BITS = 7; - var END_BLOCK = 256; - var REP_3_6 = 16; - var REPZ_3_10 = 17; - var REPZ_11_138 = 18; - var extra_lbits = ( - /* extra bits for each length code */ - [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0] - ); - var extra_dbits = ( - /* extra bits for each distance code */ - [0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13] - ); - var extra_blbits = ( - /* extra bits for each bit length code */ - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 7] - ); - var bl_order = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]; - var DIST_CODE_LEN = 512; - var static_ltree = new Array((L_CODES + 2) * 2); - zero(static_ltree); - var static_dtree = new Array(D_CODES * 2); - zero(static_dtree); - var _dist_code = new Array(DIST_CODE_LEN); - zero(_dist_code); - var _length_code = new Array(MAX_MATCH - MIN_MATCH + 1); - zero(_length_code); - var base_length = new Array(LENGTH_CODES); - zero(base_length); - var base_dist = new Array(D_CODES); - zero(base_dist); - function StaticTreeDesc(static_tree, extra_bits, extra_base, elems, max_length) { - this.static_tree = static_tree; - this.extra_bits = extra_bits; - this.extra_base = extra_base; - this.elems = elems; - this.max_length = max_length; - this.has_stree = static_tree && static_tree.length; - } - var static_l_desc; - var static_d_desc; - var static_bl_desc; - function TreeDesc(dyn_tree, stat_desc) { - this.dyn_tree = dyn_tree; - this.max_code = 0; - this.stat_desc = stat_desc; - } - function d_code(dist) { - return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)]; - } - function put_short(s, w) { - s.pending_buf[s.pending++] = w & 255; - s.pending_buf[s.pending++] = w >>> 8 & 255; - } - function send_bits(s, value, length) { - if (s.bi_valid > Buf_size - length) { - s.bi_buf |= value << s.bi_valid & 65535; - put_short(s, s.bi_buf); - s.bi_buf = value >> Buf_size - s.bi_valid; - s.bi_valid += length - Buf_size; - } else { - s.bi_buf |= value << s.bi_valid & 65535; - s.bi_valid += length; - } - } - function send_code(s, c, tree) { - send_bits( - s, - tree[c * 2], - tree[c * 2 + 1] - /*.Len*/ - ); - } - function bi_reverse(code, len) { - var res = 0; - do { - res |= code & 1; - code >>>= 1; - res <<= 1; - } while (--len > 0); - return res >>> 1; - } - function bi_flush(s) { - if (s.bi_valid === 16) { - put_short(s, s.bi_buf); - s.bi_buf = 0; - s.bi_valid = 0; - } else if (s.bi_valid >= 8) { - s.pending_buf[s.pending++] = s.bi_buf & 255; - s.bi_buf >>= 8; - s.bi_valid -= 8; - } - } - function gen_bitlen(s, desc) { - var tree = desc.dyn_tree; - var max_code = desc.max_code; - var stree = desc.stat_desc.static_tree; - var has_stree = desc.stat_desc.has_stree; - var extra = desc.stat_desc.extra_bits; - var base = desc.stat_desc.extra_base; - var max_length = desc.stat_desc.max_length; - var h; - var n, m; - var bits; - var xbits; - var f; - var overflow = 0; - for (bits = 0; bits <= MAX_BITS; bits++) { - s.bl_count[bits] = 0; - } - tree[s.heap[s.heap_max] * 2 + 1] = 0; - for (h = s.heap_max + 1; h < HEAP_SIZE; h++) { - n = s.heap[h]; - bits = tree[tree[n * 2 + 1] * 2 + 1] + 1; - if (bits > max_length) { - bits = max_length; - overflow++; - } - tree[n * 2 + 1] = bits; - if (n > max_code) { - continue; - } - s.bl_count[bits]++; - xbits = 0; - if (n >= base) { - xbits = extra[n - base]; - } - f = tree[n * 2]; - s.opt_len += f * (bits + xbits); - if (has_stree) { - s.static_len += f * (stree[n * 2 + 1] + xbits); - } - } - if (overflow === 0) { - return; - } - do { - bits = max_length - 1; - while (s.bl_count[bits] === 0) { - bits--; - } - s.bl_count[bits]--; - s.bl_count[bits + 1] += 2; - s.bl_count[max_length]--; - overflow -= 2; - } while (overflow > 0); - for (bits = max_length; bits !== 0; bits--) { - n = s.bl_count[bits]; - while (n !== 0) { - m = s.heap[--h]; - if (m > max_code) { - continue; - } - if (tree[m * 2 + 1] !== bits) { - s.opt_len += (bits - tree[m * 2 + 1]) * tree[m * 2]; - tree[m * 2 + 1] = bits; - } - n--; - } - } - } - function gen_codes(tree, max_code, bl_count) { - var next_code = new Array(MAX_BITS + 1); - var code = 0; - var bits; - var n; - for (bits = 1; bits <= MAX_BITS; bits++) { - next_code[bits] = code = code + bl_count[bits - 1] << 1; - } - for (n = 0; n <= max_code; n++) { - var len = tree[n * 2 + 1]; - if (len === 0) { - continue; - } - tree[n * 2] = bi_reverse(next_code[len]++, len); - } - } - function tr_static_init() { - var n; - var bits; - var length; - var code; - var dist; - var bl_count = new Array(MAX_BITS + 1); - length = 0; - for (code = 0; code < LENGTH_CODES - 1; code++) { - base_length[code] = length; - for (n = 0; n < 1 << extra_lbits[code]; n++) { - _length_code[length++] = code; - } - } - _length_code[length - 1] = code; - dist = 0; - for (code = 0; code < 16; code++) { - base_dist[code] = dist; - for (n = 0; n < 1 << extra_dbits[code]; n++) { - _dist_code[dist++] = code; - } - } - dist >>= 7; - for (; code < D_CODES; code++) { - base_dist[code] = dist << 7; - for (n = 0; n < 1 << extra_dbits[code] - 7; n++) { - _dist_code[256 + dist++] = code; - } - } - for (bits = 0; bits <= MAX_BITS; bits++) { - bl_count[bits] = 0; - } - n = 0; - while (n <= 143) { - static_ltree[n * 2 + 1] = 8; - n++; - bl_count[8]++; - } - while (n <= 255) { - static_ltree[n * 2 + 1] = 9; - n++; - bl_count[9]++; - } - while (n <= 279) { - static_ltree[n * 2 + 1] = 7; - n++; - bl_count[7]++; - } - while (n <= 287) { - static_ltree[n * 2 + 1] = 8; - n++; - bl_count[8]++; - } - gen_codes(static_ltree, L_CODES + 1, bl_count); - for (n = 0; n < D_CODES; n++) { - static_dtree[n * 2 + 1] = 5; - static_dtree[n * 2] = bi_reverse(n, 5); - } - static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS + 1, L_CODES, MAX_BITS); - static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0, D_CODES, MAX_BITS); - static_bl_desc = new StaticTreeDesc(new Array(0), extra_blbits, 0, BL_CODES, MAX_BL_BITS); - } - function init_block(s) { - var n; - for (n = 0; n < L_CODES; n++) { - s.dyn_ltree[n * 2] = 0; - } - for (n = 0; n < D_CODES; n++) { - s.dyn_dtree[n * 2] = 0; - } - for (n = 0; n < BL_CODES; n++) { - s.bl_tree[n * 2] = 0; - } - s.dyn_ltree[END_BLOCK * 2] = 1; - s.opt_len = s.static_len = 0; - s.last_lit = s.matches = 0; - } - function bi_windup(s) { - if (s.bi_valid > 8) { - put_short(s, s.bi_buf); - } else if (s.bi_valid > 0) { - s.pending_buf[s.pending++] = s.bi_buf; - } - s.bi_buf = 0; - s.bi_valid = 0; - } - function copy_block(s, buf, len, header) { - bi_windup(s); - if (header) { - put_short(s, len); - put_short(s, ~len); - } - utils.arraySet(s.pending_buf, s.window, buf, len, s.pending); - s.pending += len; - } - function smaller(tree, n, m, depth) { - var _n2 = n * 2; - var _m2 = m * 2; - return tree[_n2] < tree[_m2] || tree[_n2] === tree[_m2] && depth[n] <= depth[m]; - } - function pqdownheap(s, tree, k) { - var v = s.heap[k]; - var j = k << 1; - while (j <= s.heap_len) { - if (j < s.heap_len && smaller(tree, s.heap[j + 1], s.heap[j], s.depth)) { - j++; - } - if (smaller(tree, v, s.heap[j], s.depth)) { - break; - } - s.heap[k] = s.heap[j]; - k = j; - j <<= 1; - } - s.heap[k] = v; - } - function compress_block(s, ltree, dtree) { - var dist; - var lc; - var lx = 0; - var code; - var extra; - if (s.last_lit !== 0) { - do { - dist = s.pending_buf[s.d_buf + lx * 2] << 8 | s.pending_buf[s.d_buf + lx * 2 + 1]; - lc = s.pending_buf[s.l_buf + lx]; - lx++; - if (dist === 0) { - send_code(s, lc, ltree); - } else { - code = _length_code[lc]; - send_code(s, code + LITERALS + 1, ltree); - extra = extra_lbits[code]; - if (extra !== 0) { - lc -= base_length[code]; - send_bits(s, lc, extra); - } - dist--; - code = d_code(dist); - send_code(s, code, dtree); - extra = extra_dbits[code]; - if (extra !== 0) { - dist -= base_dist[code]; - send_bits(s, dist, extra); - } - } - } while (lx < s.last_lit); - } - send_code(s, END_BLOCK, ltree); - } - function build_tree(s, desc) { - var tree = desc.dyn_tree; - var stree = desc.stat_desc.static_tree; - var has_stree = desc.stat_desc.has_stree; - var elems = desc.stat_desc.elems; - var n, m; - var max_code = -1; - var node; - s.heap_len = 0; - s.heap_max = HEAP_SIZE; - for (n = 0; n < elems; n++) { - if (tree[n * 2] !== 0) { - s.heap[++s.heap_len] = max_code = n; - s.depth[n] = 0; - } else { - tree[n * 2 + 1] = 0; - } - } - while (s.heap_len < 2) { - node = s.heap[++s.heap_len] = max_code < 2 ? ++max_code : 0; - tree[node * 2] = 1; - s.depth[node] = 0; - s.opt_len--; - if (has_stree) { - s.static_len -= stree[node * 2 + 1]; - } - } - desc.max_code = max_code; - for (n = s.heap_len >> 1; n >= 1; n--) { - pqdownheap(s, tree, n); - } - node = elems; - do { - n = s.heap[ - 1 - /*SMALLEST*/ - ]; - s.heap[ - 1 - /*SMALLEST*/ - ] = s.heap[s.heap_len--]; - pqdownheap( - s, - tree, - 1 - /*SMALLEST*/ - ); - m = s.heap[ - 1 - /*SMALLEST*/ - ]; - s.heap[--s.heap_max] = n; - s.heap[--s.heap_max] = m; - tree[node * 2] = tree[n * 2] + tree[m * 2]; - s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1; - tree[n * 2 + 1] = tree[m * 2 + 1] = node; - s.heap[ - 1 - /*SMALLEST*/ - ] = node++; - pqdownheap( - s, - tree, - 1 - /*SMALLEST*/ - ); - } while (s.heap_len >= 2); - s.heap[--s.heap_max] = s.heap[ - 1 - /*SMALLEST*/ - ]; - gen_bitlen(s, desc); - gen_codes(tree, max_code, s.bl_count); - } - function scan_tree(s, tree, max_code) { - var n; - var prevlen = -1; - var curlen; - var nextlen = tree[0 * 2 + 1]; - var count = 0; - var max_count = 7; - var min_count = 4; - if (nextlen === 0) { - max_count = 138; - min_count = 3; - } - tree[(max_code + 1) * 2 + 1] = 65535; - for (n = 0; n <= max_code; n++) { - curlen = nextlen; - nextlen = tree[(n + 1) * 2 + 1]; - if (++count < max_count && curlen === nextlen) { - continue; - } else if (count < min_count) { - s.bl_tree[curlen * 2] += count; - } else if (curlen !== 0) { - if (curlen !== prevlen) { - s.bl_tree[curlen * 2]++; - } - s.bl_tree[REP_3_6 * 2]++; - } else if (count <= 10) { - s.bl_tree[REPZ_3_10 * 2]++; - } else { - s.bl_tree[REPZ_11_138 * 2]++; - } - count = 0; - prevlen = curlen; - if (nextlen === 0) { - max_count = 138; - min_count = 3; - } else if (curlen === nextlen) { - max_count = 6; - min_count = 3; - } else { - max_count = 7; - min_count = 4; - } - } - } - function send_tree(s, tree, max_code) { - var n; - var prevlen = -1; - var curlen; - var nextlen = tree[0 * 2 + 1]; - var count = 0; - var max_count = 7; - var min_count = 4; - if (nextlen === 0) { - max_count = 138; - min_count = 3; - } - for (n = 0; n <= max_code; n++) { - curlen = nextlen; - nextlen = tree[(n + 1) * 2 + 1]; - if (++count < max_count && curlen === nextlen) { - continue; - } else if (count < min_count) { - do { - send_code(s, curlen, s.bl_tree); - } while (--count !== 0); - } else if (curlen !== 0) { - if (curlen !== prevlen) { - send_code(s, curlen, s.bl_tree); - count--; - } - send_code(s, REP_3_6, s.bl_tree); - send_bits(s, count - 3, 2); - } else if (count <= 10) { - send_code(s, REPZ_3_10, s.bl_tree); - send_bits(s, count - 3, 3); - } else { - send_code(s, REPZ_11_138, s.bl_tree); - send_bits(s, count - 11, 7); - } - count = 0; - prevlen = curlen; - if (nextlen === 0) { - max_count = 138; - min_count = 3; - } else if (curlen === nextlen) { - max_count = 6; - min_count = 3; - } else { - max_count = 7; - min_count = 4; - } - } - } - function build_bl_tree(s) { - var max_blindex; - scan_tree(s, s.dyn_ltree, s.l_desc.max_code); - scan_tree(s, s.dyn_dtree, s.d_desc.max_code); - build_tree(s, s.bl_desc); - for (max_blindex = BL_CODES - 1; max_blindex >= 3; max_blindex--) { - if (s.bl_tree[bl_order[max_blindex] * 2 + 1] !== 0) { - break; - } - } - s.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4; - return max_blindex; - } - function send_all_trees(s, lcodes, dcodes, blcodes) { - var rank; - send_bits(s, lcodes - 257, 5); - send_bits(s, dcodes - 1, 5); - send_bits(s, blcodes - 4, 4); - for (rank = 0; rank < blcodes; rank++) { - send_bits(s, s.bl_tree[bl_order[rank] * 2 + 1], 3); - } - send_tree(s, s.dyn_ltree, lcodes - 1); - send_tree(s, s.dyn_dtree, dcodes - 1); - } - function detect_data_type(s) { - var black_mask = 4093624447; - var n; - for (n = 0; n <= 31; n++, black_mask >>>= 1) { - if (black_mask & 1 && s.dyn_ltree[n * 2] !== 0) { - return Z_BINARY; - } - } - if (s.dyn_ltree[9 * 2] !== 0 || s.dyn_ltree[10 * 2] !== 0 || s.dyn_ltree[13 * 2] !== 0) { - return Z_TEXT; - } - for (n = 32; n < LITERALS; n++) { - if (s.dyn_ltree[n * 2] !== 0) { - return Z_TEXT; - } - } - return Z_BINARY; - } - var static_init_done = false; - function _tr_init(s) { - if (!static_init_done) { - tr_static_init(); - static_init_done = true; - } - s.l_desc = new TreeDesc(s.dyn_ltree, static_l_desc); - s.d_desc = new TreeDesc(s.dyn_dtree, static_d_desc); - s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc); - s.bi_buf = 0; - s.bi_valid = 0; - init_block(s); - } - function _tr_stored_block(s, buf, stored_len, last2) { - send_bits(s, (STORED_BLOCK << 1) + (last2 ? 1 : 0), 3); - copy_block(s, buf, stored_len, true); - } - function _tr_align(s) { - send_bits(s, STATIC_TREES << 1, 3); - send_code(s, END_BLOCK, static_ltree); - bi_flush(s); - } - function _tr_flush_block(s, buf, stored_len, last2) { - var opt_lenb, static_lenb; - var max_blindex = 0; - if (s.level > 0) { - if (s.strm.data_type === Z_UNKNOWN) { - s.strm.data_type = detect_data_type(s); - } - build_tree(s, s.l_desc); - build_tree(s, s.d_desc); - max_blindex = build_bl_tree(s); - opt_lenb = s.opt_len + 3 + 7 >>> 3; - static_lenb = s.static_len + 3 + 7 >>> 3; - if (static_lenb <= opt_lenb) { - opt_lenb = static_lenb; - } - } else { - opt_lenb = static_lenb = stored_len + 5; - } - if (stored_len + 4 <= opt_lenb && buf !== -1) { - _tr_stored_block(s, buf, stored_len, last2); - } else if (s.strategy === Z_FIXED || static_lenb === opt_lenb) { - send_bits(s, (STATIC_TREES << 1) + (last2 ? 1 : 0), 3); - compress_block(s, static_ltree, static_dtree); - } else { - send_bits(s, (DYN_TREES << 1) + (last2 ? 1 : 0), 3); - send_all_trees(s, s.l_desc.max_code + 1, s.d_desc.max_code + 1, max_blindex + 1); - compress_block(s, s.dyn_ltree, s.dyn_dtree); - } - init_block(s); - if (last2) { - bi_windup(s); - } - } - function _tr_tally(s, dist, lc) { - s.pending_buf[s.d_buf + s.last_lit * 2] = dist >>> 8 & 255; - s.pending_buf[s.d_buf + s.last_lit * 2 + 1] = dist & 255; - s.pending_buf[s.l_buf + s.last_lit] = lc & 255; - s.last_lit++; - if (dist === 0) { - s.dyn_ltree[lc * 2]++; - } else { - s.matches++; - dist--; - s.dyn_ltree[(_length_code[lc] + LITERALS + 1) * 2]++; - s.dyn_dtree[d_code(dist) * 2]++; - } - return s.last_lit === s.lit_bufsize - 1; - } - exports2._tr_init = _tr_init; - exports2._tr_stored_block = _tr_stored_block; - exports2._tr_flush_block = _tr_flush_block; - exports2._tr_tally = _tr_tally; - exports2._tr_align = _tr_align; - } -}); - -// node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/adler32.js -var require_adler32 = __commonJS({ - "node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/adler32.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - function adler32(adler, buf, len, pos) { - var s1 = adler & 65535 | 0, s2 = adler >>> 16 & 65535 | 0, n = 0; - while (len !== 0) { - n = len > 2e3 ? 2e3 : len; - len -= n; - do { - s1 = s1 + buf[pos++] | 0; - s2 = s2 + s1 | 0; - } while (--n); - s1 %= 65521; - s2 %= 65521; - } - return s1 | s2 << 16 | 0; - } - module2.exports = adler32; - } -}); - -// node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/crc32.js -var require_crc322 = __commonJS({ - "node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/crc32.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - function makeTable() { - var c, table = []; - for (var n = 0; n < 256; n++) { - c = n; - for (var k = 0; k < 8; k++) { - c = c & 1 ? 3988292384 ^ c >>> 1 : c >>> 1; - } - table[n] = c; - } - return table; - } - var crcTable = makeTable(); - function crc322(crc, buf, len, pos) { - var t = crcTable, end = pos + len; - crc ^= -1; - for (var i = pos; i < end; i++) { - crc = crc >>> 8 ^ t[(crc ^ buf[i]) & 255]; - } - return crc ^ -1; - } - module2.exports = crc322; - } -}); - -// node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/messages.js -var require_messages = __commonJS({ - "node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/messages.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - module2.exports = { - 2: "need dictionary", - /* Z_NEED_DICT 2 */ - 1: "stream end", - /* Z_STREAM_END 1 */ - 0: "", - /* Z_OK 0 */ - "-1": "file error", - /* Z_ERRNO (-1) */ - "-2": "stream error", - /* Z_STREAM_ERROR (-2) */ - "-3": "data error", - /* Z_DATA_ERROR (-3) */ - "-4": "insufficient memory", - /* Z_MEM_ERROR (-4) */ - "-5": "buffer error", - /* Z_BUF_ERROR (-5) */ - "-6": "incompatible version" - /* Z_VERSION_ERROR (-6) */ - }; - } -}); - -// node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/deflate.js -var require_deflate = __commonJS({ - "node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/deflate.js"(exports2) { - "use strict"; - init_polyfill_buffer(); - var utils = require_common(); - var trees = require_trees(); - var adler32 = require_adler32(); - var crc322 = require_crc322(); - var msg = require_messages(); - var Z_NO_FLUSH = 0; - var Z_PARTIAL_FLUSH = 1; - var Z_FULL_FLUSH = 3; - var Z_FINISH = 4; - var Z_BLOCK = 5; - var Z_OK = 0; - var Z_STREAM_END = 1; - var Z_STREAM_ERROR = -2; - var Z_DATA_ERROR = -3; - var Z_BUF_ERROR = -5; - var Z_DEFAULT_COMPRESSION = -1; - var Z_FILTERED = 1; - var Z_HUFFMAN_ONLY = 2; - var Z_RLE = 3; - var Z_FIXED = 4; - var Z_DEFAULT_STRATEGY = 0; - var Z_UNKNOWN = 2; - var Z_DEFLATED = 8; - var MAX_MEM_LEVEL = 9; - var MAX_WBITS = 15; - var DEF_MEM_LEVEL = 8; - var LENGTH_CODES = 29; - var LITERALS = 256; - var L_CODES = LITERALS + 1 + LENGTH_CODES; - var D_CODES = 30; - var BL_CODES = 19; - var HEAP_SIZE = 2 * L_CODES + 1; - var MAX_BITS = 15; - var MIN_MATCH = 3; - var MAX_MATCH = 258; - var MIN_LOOKAHEAD = MAX_MATCH + MIN_MATCH + 1; - var PRESET_DICT = 32; - var INIT_STATE = 42; - var EXTRA_STATE = 69; - var NAME_STATE = 73; - var COMMENT_STATE = 91; - var HCRC_STATE = 103; - var BUSY_STATE = 113; - var FINISH_STATE = 666; - var BS_NEED_MORE = 1; - var BS_BLOCK_DONE = 2; - var BS_FINISH_STARTED = 3; - var BS_FINISH_DONE = 4; - var OS_CODE = 3; - function err(strm, errorCode) { - strm.msg = msg[errorCode]; - return errorCode; - } - function rank(f) { - return (f << 1) - (f > 4 ? 9 : 0); - } - function zero(buf) { - var len = buf.length; - while (--len >= 0) { - buf[len] = 0; - } - } - function flush_pending(strm) { - var s = strm.state; - var len = s.pending; - if (len > strm.avail_out) { - len = strm.avail_out; - } - if (len === 0) { - return; - } - utils.arraySet(strm.output, s.pending_buf, s.pending_out, len, strm.next_out); - strm.next_out += len; - s.pending_out += len; - strm.total_out += len; - strm.avail_out -= len; - s.pending -= len; - if (s.pending === 0) { - s.pending_out = 0; - } - } - function flush_block_only(s, last2) { - trees._tr_flush_block(s, s.block_start >= 0 ? s.block_start : -1, s.strstart - s.block_start, last2); - s.block_start = s.strstart; - flush_pending(s.strm); - } - function put_byte(s, b) { - s.pending_buf[s.pending++] = b; - } - function putShortMSB(s, b) { - s.pending_buf[s.pending++] = b >>> 8 & 255; - s.pending_buf[s.pending++] = b & 255; - } - function read_buf(strm, buf, start, size) { - var len = strm.avail_in; - if (len > size) { - len = size; - } - if (len === 0) { - return 0; - } - strm.avail_in -= len; - utils.arraySet(buf, strm.input, strm.next_in, len, start); - if (strm.state.wrap === 1) { - strm.adler = adler32(strm.adler, buf, len, start); - } else if (strm.state.wrap === 2) { - strm.adler = crc322(strm.adler, buf, len, start); - } - strm.next_in += len; - strm.total_in += len; - return len; - } - function longest_match(s, cur_match) { - var chain_length = s.max_chain_length; - var scan = s.strstart; - var match; - var len; - var best_len = s.prev_length; - var nice_match = s.nice_match; - var limit = s.strstart > s.w_size - MIN_LOOKAHEAD ? s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0; - var _win = s.window; - var wmask = s.w_mask; - var prev = s.prev; - var strend = s.strstart + MAX_MATCH; - var scan_end1 = _win[scan + best_len - 1]; - var scan_end = _win[scan + best_len]; - if (s.prev_length >= s.good_match) { - chain_length >>= 2; - } - if (nice_match > s.lookahead) { - nice_match = s.lookahead; - } - do { - match = cur_match; - if (_win[match + best_len] !== scan_end || _win[match + best_len - 1] !== scan_end1 || _win[match] !== _win[scan] || _win[++match] !== _win[scan + 1]) { - continue; - } - scan += 2; - match++; - do { - } while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && scan < strend); - len = MAX_MATCH - (strend - scan); - scan = strend - MAX_MATCH; - if (len > best_len) { - s.match_start = cur_match; - best_len = len; - if (len >= nice_match) { - break; - } - scan_end1 = _win[scan + best_len - 1]; - scan_end = _win[scan + best_len]; - } - } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0); - if (best_len <= s.lookahead) { - return best_len; - } - return s.lookahead; - } - function fill_window(s) { - var _w_size = s.w_size; - var p, n, m, more, str; - do { - more = s.window_size - s.lookahead - s.strstart; - if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) { - utils.arraySet(s.window, s.window, _w_size, _w_size, 0); - s.match_start -= _w_size; - s.strstart -= _w_size; - s.block_start -= _w_size; - n = s.hash_size; - p = n; - do { - m = s.head[--p]; - s.head[p] = m >= _w_size ? m - _w_size : 0; - } while (--n); - n = _w_size; - p = n; - do { - m = s.prev[--p]; - s.prev[p] = m >= _w_size ? m - _w_size : 0; - } while (--n); - more += _w_size; - } - if (s.strm.avail_in === 0) { - break; - } - n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more); - s.lookahead += n; - if (s.lookahead + s.insert >= MIN_MATCH) { - str = s.strstart - s.insert; - s.ins_h = s.window[str]; - s.ins_h = (s.ins_h << s.hash_shift ^ s.window[str + 1]) & s.hash_mask; - while (s.insert) { - s.ins_h = (s.ins_h << s.hash_shift ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask; - s.prev[str & s.w_mask] = s.head[s.ins_h]; - s.head[s.ins_h] = str; - str++; - s.insert--; - if (s.lookahead + s.insert < MIN_MATCH) { - break; - } - } - } - } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0); - } - function deflate_stored(s, flush2) { - var max_block_size = 65535; - if (max_block_size > s.pending_buf_size - 5) { - max_block_size = s.pending_buf_size - 5; - } - for (; ; ) { - if (s.lookahead <= 1) { - fill_window(s); - if (s.lookahead === 0 && flush2 === Z_NO_FLUSH) { - return BS_NEED_MORE; - } - if (s.lookahead === 0) { - break; - } - } - s.strstart += s.lookahead; - s.lookahead = 0; - var max_start = s.block_start + max_block_size; - if (s.strstart === 0 || s.strstart >= max_start) { - s.lookahead = s.strstart - max_start; - s.strstart = max_start; - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - } - if (s.strstart - s.block_start >= s.w_size - MIN_LOOKAHEAD) { - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - } - } - s.insert = 0; - if (flush2 === Z_FINISH) { - flush_block_only(s, true); - if (s.strm.avail_out === 0) { - return BS_FINISH_STARTED; - } - return BS_FINISH_DONE; - } - if (s.strstart > s.block_start) { - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - } - return BS_NEED_MORE; - } - function deflate_fast(s, flush2) { - var hash_head; - var bflush; - for (; ; ) { - if (s.lookahead < MIN_LOOKAHEAD) { - fill_window(s); - if (s.lookahead < MIN_LOOKAHEAD && flush2 === Z_NO_FLUSH) { - return BS_NEED_MORE; - } - if (s.lookahead === 0) { - break; - } - } - hash_head = 0; - if (s.lookahead >= MIN_MATCH) { - s.ins_h = (s.ins_h << s.hash_shift ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask; - hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; - s.head[s.ins_h] = s.strstart; - } - if (hash_head !== 0 && s.strstart - hash_head <= s.w_size - MIN_LOOKAHEAD) { - s.match_length = longest_match(s, hash_head); - } - if (s.match_length >= MIN_MATCH) { - bflush = trees._tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH); - s.lookahead -= s.match_length; - if (s.match_length <= s.max_lazy_match && s.lookahead >= MIN_MATCH) { - s.match_length--; - do { - s.strstart++; - s.ins_h = (s.ins_h << s.hash_shift ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask; - hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; - s.head[s.ins_h] = s.strstart; - } while (--s.match_length !== 0); - s.strstart++; - } else { - s.strstart += s.match_length; - s.match_length = 0; - s.ins_h = s.window[s.strstart]; - s.ins_h = (s.ins_h << s.hash_shift ^ s.window[s.strstart + 1]) & s.hash_mask; - } - } else { - bflush = trees._tr_tally(s, 0, s.window[s.strstart]); - s.lookahead--; - s.strstart++; - } - if (bflush) { - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - } - } - s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1; - if (flush2 === Z_FINISH) { - flush_block_only(s, true); - if (s.strm.avail_out === 0) { - return BS_FINISH_STARTED; - } - return BS_FINISH_DONE; - } - if (s.last_lit) { - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - } - return BS_BLOCK_DONE; - } - function deflate_slow(s, flush2) { - var hash_head; - var bflush; - var max_insert; - for (; ; ) { - if (s.lookahead < MIN_LOOKAHEAD) { - fill_window(s); - if (s.lookahead < MIN_LOOKAHEAD && flush2 === Z_NO_FLUSH) { - return BS_NEED_MORE; - } - if (s.lookahead === 0) { - break; - } - } - hash_head = 0; - if (s.lookahead >= MIN_MATCH) { - s.ins_h = (s.ins_h << s.hash_shift ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask; - hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; - s.head[s.ins_h] = s.strstart; - } - s.prev_length = s.match_length; - s.prev_match = s.match_start; - s.match_length = MIN_MATCH - 1; - if (hash_head !== 0 && s.prev_length < s.max_lazy_match && s.strstart - hash_head <= s.w_size - MIN_LOOKAHEAD) { - s.match_length = longest_match(s, hash_head); - if (s.match_length <= 5 && (s.strategy === Z_FILTERED || s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096)) { - s.match_length = MIN_MATCH - 1; - } - } - if (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) { - max_insert = s.strstart + s.lookahead - MIN_MATCH; - bflush = trees._tr_tally(s, s.strstart - 1 - s.prev_match, s.prev_length - MIN_MATCH); - s.lookahead -= s.prev_length - 1; - s.prev_length -= 2; - do { - if (++s.strstart <= max_insert) { - s.ins_h = (s.ins_h << s.hash_shift ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask; - hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; - s.head[s.ins_h] = s.strstart; - } - } while (--s.prev_length !== 0); - s.match_available = 0; - s.match_length = MIN_MATCH - 1; - s.strstart++; - if (bflush) { - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - } - } else if (s.match_available) { - bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]); - if (bflush) { - flush_block_only(s, false); - } - s.strstart++; - s.lookahead--; - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - } else { - s.match_available = 1; - s.strstart++; - s.lookahead--; - } - } - if (s.match_available) { - bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]); - s.match_available = 0; - } - s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1; - if (flush2 === Z_FINISH) { - flush_block_only(s, true); - if (s.strm.avail_out === 0) { - return BS_FINISH_STARTED; - } - return BS_FINISH_DONE; - } - if (s.last_lit) { - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - } - return BS_BLOCK_DONE; - } - function deflate_rle(s, flush2) { - var bflush; - var prev; - var scan, strend; - var _win = s.window; - for (; ; ) { - if (s.lookahead <= MAX_MATCH) { - fill_window(s); - if (s.lookahead <= MAX_MATCH && flush2 === Z_NO_FLUSH) { - return BS_NEED_MORE; - } - if (s.lookahead === 0) { - break; - } - } - s.match_length = 0; - if (s.lookahead >= MIN_MATCH && s.strstart > 0) { - scan = s.strstart - 1; - prev = _win[scan]; - if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) { - strend = s.strstart + MAX_MATCH; - do { - } while (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] && scan < strend); - s.match_length = MAX_MATCH - (strend - scan); - if (s.match_length > s.lookahead) { - s.match_length = s.lookahead; - } - } - } - if (s.match_length >= MIN_MATCH) { - bflush = trees._tr_tally(s, 1, s.match_length - MIN_MATCH); - s.lookahead -= s.match_length; - s.strstart += s.match_length; - s.match_length = 0; - } else { - bflush = trees._tr_tally(s, 0, s.window[s.strstart]); - s.lookahead--; - s.strstart++; - } - if (bflush) { - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - } - } - s.insert = 0; - if (flush2 === Z_FINISH) { - flush_block_only(s, true); - if (s.strm.avail_out === 0) { - return BS_FINISH_STARTED; - } - return BS_FINISH_DONE; - } - if (s.last_lit) { - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - } - return BS_BLOCK_DONE; - } - function deflate_huff(s, flush2) { - var bflush; - for (; ; ) { - if (s.lookahead === 0) { - fill_window(s); - if (s.lookahead === 0) { - if (flush2 === Z_NO_FLUSH) { - return BS_NEED_MORE; - } - break; - } - } - s.match_length = 0; - bflush = trees._tr_tally(s, 0, s.window[s.strstart]); - s.lookahead--; - s.strstart++; - if (bflush) { - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - } - } - s.insert = 0; - if (flush2 === Z_FINISH) { - flush_block_only(s, true); - if (s.strm.avail_out === 0) { - return BS_FINISH_STARTED; - } - return BS_FINISH_DONE; - } - if (s.last_lit) { - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - } - return BS_BLOCK_DONE; - } - function Config(good_length, max_lazy, nice_length, max_chain, func) { - this.good_length = good_length; - this.max_lazy = max_lazy; - this.nice_length = nice_length; - this.max_chain = max_chain; - this.func = func; - } - var configuration_table; - configuration_table = [ - /* good lazy nice chain */ - new Config(0, 0, 0, 0, deflate_stored), - /* 0 store only */ - new Config(4, 4, 8, 4, deflate_fast), - /* 1 max speed, no lazy matches */ - new Config(4, 5, 16, 8, deflate_fast), - /* 2 */ - new Config(4, 6, 32, 32, deflate_fast), - /* 3 */ - new Config(4, 4, 16, 16, deflate_slow), - /* 4 lazy matches */ - new Config(8, 16, 32, 32, deflate_slow), - /* 5 */ - new Config(8, 16, 128, 128, deflate_slow), - /* 6 */ - new Config(8, 32, 128, 256, deflate_slow), - /* 7 */ - new Config(32, 128, 258, 1024, deflate_slow), - /* 8 */ - new Config(32, 258, 258, 4096, deflate_slow) - /* 9 max compression */ - ]; - function lm_init(s) { - s.window_size = 2 * s.w_size; - zero(s.head); - s.max_lazy_match = configuration_table[s.level].max_lazy; - s.good_match = configuration_table[s.level].good_length; - s.nice_match = configuration_table[s.level].nice_length; - s.max_chain_length = configuration_table[s.level].max_chain; - s.strstart = 0; - s.block_start = 0; - s.lookahead = 0; - s.insert = 0; - s.match_length = s.prev_length = MIN_MATCH - 1; - s.match_available = 0; - s.ins_h = 0; - } - function DeflateState() { - this.strm = null; - this.status = 0; - this.pending_buf = null; - this.pending_buf_size = 0; - this.pending_out = 0; - this.pending = 0; - this.wrap = 0; - this.gzhead = null; - this.gzindex = 0; - this.method = Z_DEFLATED; - this.last_flush = -1; - this.w_size = 0; - this.w_bits = 0; - this.w_mask = 0; - this.window = null; - this.window_size = 0; - this.prev = null; - this.head = null; - this.ins_h = 0; - this.hash_size = 0; - this.hash_bits = 0; - this.hash_mask = 0; - this.hash_shift = 0; - this.block_start = 0; - this.match_length = 0; - this.prev_match = 0; - this.match_available = 0; - this.strstart = 0; - this.match_start = 0; - this.lookahead = 0; - this.prev_length = 0; - this.max_chain_length = 0; - this.max_lazy_match = 0; - this.level = 0; - this.strategy = 0; - this.good_match = 0; - this.nice_match = 0; - this.dyn_ltree = new utils.Buf16(HEAP_SIZE * 2); - this.dyn_dtree = new utils.Buf16((2 * D_CODES + 1) * 2); - this.bl_tree = new utils.Buf16((2 * BL_CODES + 1) * 2); - zero(this.dyn_ltree); - zero(this.dyn_dtree); - zero(this.bl_tree); - this.l_desc = null; - this.d_desc = null; - this.bl_desc = null; - this.bl_count = new utils.Buf16(MAX_BITS + 1); - this.heap = new utils.Buf16(2 * L_CODES + 1); - zero(this.heap); - this.heap_len = 0; - this.heap_max = 0; - this.depth = new utils.Buf16(2 * L_CODES + 1); - zero(this.depth); - this.l_buf = 0; - this.lit_bufsize = 0; - this.last_lit = 0; - this.d_buf = 0; - this.opt_len = 0; - this.static_len = 0; - this.matches = 0; - this.insert = 0; - this.bi_buf = 0; - this.bi_valid = 0; - } - function deflateResetKeep(strm) { - var s; - if (!strm || !strm.state) { - return err(strm, Z_STREAM_ERROR); - } - strm.total_in = strm.total_out = 0; - strm.data_type = Z_UNKNOWN; - s = strm.state; - s.pending = 0; - s.pending_out = 0; - if (s.wrap < 0) { - s.wrap = -s.wrap; - } - s.status = s.wrap ? INIT_STATE : BUSY_STATE; - strm.adler = s.wrap === 2 ? 0 : 1; - s.last_flush = Z_NO_FLUSH; - trees._tr_init(s); - return Z_OK; - } - function deflateReset(strm) { - var ret = deflateResetKeep(strm); - if (ret === Z_OK) { - lm_init(strm.state); - } - return ret; - } - function deflateSetHeader(strm, head) { - if (!strm || !strm.state) { - return Z_STREAM_ERROR; - } - if (strm.state.wrap !== 2) { - return Z_STREAM_ERROR; - } - strm.state.gzhead = head; - return Z_OK; - } - function deflateInit2(strm, level, method2, windowBits, memLevel, strategy) { - if (!strm) { - return Z_STREAM_ERROR; - } - var wrap = 1; - if (level === Z_DEFAULT_COMPRESSION) { - level = 6; - } - if (windowBits < 0) { - wrap = 0; - windowBits = -windowBits; - } else if (windowBits > 15) { - wrap = 2; - windowBits -= 16; - } - if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method2 !== Z_DEFLATED || windowBits < 8 || windowBits > 15 || level < 0 || level > 9 || strategy < 0 || strategy > Z_FIXED) { - return err(strm, Z_STREAM_ERROR); - } - if (windowBits === 8) { - windowBits = 9; - } - var s = new DeflateState(); - strm.state = s; - s.strm = strm; - s.wrap = wrap; - s.gzhead = null; - s.w_bits = windowBits; - s.w_size = 1 << s.w_bits; - s.w_mask = s.w_size - 1; - s.hash_bits = memLevel + 7; - s.hash_size = 1 << s.hash_bits; - s.hash_mask = s.hash_size - 1; - s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH); - s.window = new utils.Buf8(s.w_size * 2); - s.head = new utils.Buf16(s.hash_size); - s.prev = new utils.Buf16(s.w_size); - s.lit_bufsize = 1 << memLevel + 6; - s.pending_buf_size = s.lit_bufsize * 4; - s.pending_buf = new utils.Buf8(s.pending_buf_size); - s.d_buf = 1 * s.lit_bufsize; - s.l_buf = (1 + 2) * s.lit_bufsize; - s.level = level; - s.strategy = strategy; - s.method = method2; - return deflateReset(strm); - } - function deflateInit(strm, level) { - return deflateInit2(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY); - } - function deflate2(strm, flush2) { - var old_flush, s; - var beg, val; - if (!strm || !strm.state || flush2 > Z_BLOCK || flush2 < 0) { - return strm ? err(strm, Z_STREAM_ERROR) : Z_STREAM_ERROR; - } - s = strm.state; - if (!strm.output || !strm.input && strm.avail_in !== 0 || s.status === FINISH_STATE && flush2 !== Z_FINISH) { - return err(strm, strm.avail_out === 0 ? Z_BUF_ERROR : Z_STREAM_ERROR); - } - s.strm = strm; - old_flush = s.last_flush; - s.last_flush = flush2; - if (s.status === INIT_STATE) { - if (s.wrap === 2) { - strm.adler = 0; - put_byte(s, 31); - put_byte(s, 139); - put_byte(s, 8); - if (!s.gzhead) { - put_byte(s, 0); - put_byte(s, 0); - put_byte(s, 0); - put_byte(s, 0); - put_byte(s, 0); - put_byte(s, s.level === 9 ? 2 : s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ? 4 : 0); - put_byte(s, OS_CODE); - s.status = BUSY_STATE; - } else { - put_byte( - s, - (s.gzhead.text ? 1 : 0) + (s.gzhead.hcrc ? 2 : 0) + (!s.gzhead.extra ? 0 : 4) + (!s.gzhead.name ? 0 : 8) + (!s.gzhead.comment ? 0 : 16) - ); - put_byte(s, s.gzhead.time & 255); - put_byte(s, s.gzhead.time >> 8 & 255); - put_byte(s, s.gzhead.time >> 16 & 255); - put_byte(s, s.gzhead.time >> 24 & 255); - put_byte(s, s.level === 9 ? 2 : s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ? 4 : 0); - put_byte(s, s.gzhead.os & 255); - if (s.gzhead.extra && s.gzhead.extra.length) { - put_byte(s, s.gzhead.extra.length & 255); - put_byte(s, s.gzhead.extra.length >> 8 & 255); - } - if (s.gzhead.hcrc) { - strm.adler = crc322(strm.adler, s.pending_buf, s.pending, 0); - } - s.gzindex = 0; - s.status = EXTRA_STATE; - } - } else { - var header = Z_DEFLATED + (s.w_bits - 8 << 4) << 8; - var level_flags = -1; - if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) { - level_flags = 0; - } else if (s.level < 6) { - level_flags = 1; - } else if (s.level === 6) { - level_flags = 2; - } else { - level_flags = 3; - } - header |= level_flags << 6; - if (s.strstart !== 0) { - header |= PRESET_DICT; - } - header += 31 - header % 31; - s.status = BUSY_STATE; - putShortMSB(s, header); - if (s.strstart !== 0) { - putShortMSB(s, strm.adler >>> 16); - putShortMSB(s, strm.adler & 65535); - } - strm.adler = 1; - } - } - if (s.status === EXTRA_STATE) { - if (s.gzhead.extra) { - beg = s.pending; - while (s.gzindex < (s.gzhead.extra.length & 65535)) { - if (s.pending === s.pending_buf_size) { - if (s.gzhead.hcrc && s.pending > beg) { - strm.adler = crc322(strm.adler, s.pending_buf, s.pending - beg, beg); - } - flush_pending(strm); - beg = s.pending; - if (s.pending === s.pending_buf_size) { - break; - } - } - put_byte(s, s.gzhead.extra[s.gzindex] & 255); - s.gzindex++; - } - if (s.gzhead.hcrc && s.pending > beg) { - strm.adler = crc322(strm.adler, s.pending_buf, s.pending - beg, beg); - } - if (s.gzindex === s.gzhead.extra.length) { - s.gzindex = 0; - s.status = NAME_STATE; - } - } else { - s.status = NAME_STATE; - } - } - if (s.status === NAME_STATE) { - if (s.gzhead.name) { - beg = s.pending; - do { - if (s.pending === s.pending_buf_size) { - if (s.gzhead.hcrc && s.pending > beg) { - strm.adler = crc322(strm.adler, s.pending_buf, s.pending - beg, beg); - } - flush_pending(strm); - beg = s.pending; - if (s.pending === s.pending_buf_size) { - val = 1; - break; - } - } - if (s.gzindex < s.gzhead.name.length) { - val = s.gzhead.name.charCodeAt(s.gzindex++) & 255; - } else { - val = 0; - } - put_byte(s, val); - } while (val !== 0); - if (s.gzhead.hcrc && s.pending > beg) { - strm.adler = crc322(strm.adler, s.pending_buf, s.pending - beg, beg); - } - if (val === 0) { - s.gzindex = 0; - s.status = COMMENT_STATE; - } - } else { - s.status = COMMENT_STATE; - } - } - if (s.status === COMMENT_STATE) { - if (s.gzhead.comment) { - beg = s.pending; - do { - if (s.pending === s.pending_buf_size) { - if (s.gzhead.hcrc && s.pending > beg) { - strm.adler = crc322(strm.adler, s.pending_buf, s.pending - beg, beg); - } - flush_pending(strm); - beg = s.pending; - if (s.pending === s.pending_buf_size) { - val = 1; - break; - } - } - if (s.gzindex < s.gzhead.comment.length) { - val = s.gzhead.comment.charCodeAt(s.gzindex++) & 255; - } else { - val = 0; - } - put_byte(s, val); - } while (val !== 0); - if (s.gzhead.hcrc && s.pending > beg) { - strm.adler = crc322(strm.adler, s.pending_buf, s.pending - beg, beg); - } - if (val === 0) { - s.status = HCRC_STATE; - } - } else { - s.status = HCRC_STATE; - } - } - if (s.status === HCRC_STATE) { - if (s.gzhead.hcrc) { - if (s.pending + 2 > s.pending_buf_size) { - flush_pending(strm); - } - if (s.pending + 2 <= s.pending_buf_size) { - put_byte(s, strm.adler & 255); - put_byte(s, strm.adler >> 8 & 255); - strm.adler = 0; - s.status = BUSY_STATE; - } - } else { - s.status = BUSY_STATE; - } - } - if (s.pending !== 0) { - flush_pending(strm); - if (strm.avail_out === 0) { - s.last_flush = -1; - return Z_OK; - } - } else if (strm.avail_in === 0 && rank(flush2) <= rank(old_flush) && flush2 !== Z_FINISH) { - return err(strm, Z_BUF_ERROR); - } - if (s.status === FINISH_STATE && strm.avail_in !== 0) { - return err(strm, Z_BUF_ERROR); - } - if (strm.avail_in !== 0 || s.lookahead !== 0 || flush2 !== Z_NO_FLUSH && s.status !== FINISH_STATE) { - var bstate = s.strategy === Z_HUFFMAN_ONLY ? deflate_huff(s, flush2) : s.strategy === Z_RLE ? deflate_rle(s, flush2) : configuration_table[s.level].func(s, flush2); - if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) { - s.status = FINISH_STATE; - } - if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) { - if (strm.avail_out === 0) { - s.last_flush = -1; - } - return Z_OK; - } - if (bstate === BS_BLOCK_DONE) { - if (flush2 === Z_PARTIAL_FLUSH) { - trees._tr_align(s); - } else if (flush2 !== Z_BLOCK) { - trees._tr_stored_block(s, 0, 0, false); - if (flush2 === Z_FULL_FLUSH) { - zero(s.head); - if (s.lookahead === 0) { - s.strstart = 0; - s.block_start = 0; - s.insert = 0; - } - } - } - flush_pending(strm); - if (strm.avail_out === 0) { - s.last_flush = -1; - return Z_OK; - } - } - } - if (flush2 !== Z_FINISH) { - return Z_OK; - } - if (s.wrap <= 0) { - return Z_STREAM_END; - } - if (s.wrap === 2) { - put_byte(s, strm.adler & 255); - put_byte(s, strm.adler >> 8 & 255); - put_byte(s, strm.adler >> 16 & 255); - put_byte(s, strm.adler >> 24 & 255); - put_byte(s, strm.total_in & 255); - put_byte(s, strm.total_in >> 8 & 255); - put_byte(s, strm.total_in >> 16 & 255); - put_byte(s, strm.total_in >> 24 & 255); - } else { - putShortMSB(s, strm.adler >>> 16); - putShortMSB(s, strm.adler & 65535); - } - flush_pending(strm); - if (s.wrap > 0) { - s.wrap = -s.wrap; - } - return s.pending !== 0 ? Z_OK : Z_STREAM_END; - } - function deflateEnd(strm) { - var status2; - if (!strm || !strm.state) { - return Z_STREAM_ERROR; - } - status2 = strm.state.status; - if (status2 !== INIT_STATE && status2 !== EXTRA_STATE && status2 !== NAME_STATE && status2 !== COMMENT_STATE && status2 !== HCRC_STATE && status2 !== BUSY_STATE && status2 !== FINISH_STATE) { - return err(strm, Z_STREAM_ERROR); - } - strm.state = null; - return status2 === BUSY_STATE ? err(strm, Z_DATA_ERROR) : Z_OK; - } - function deflateSetDictionary(strm, dictionary) { - var dictLength = dictionary.length; - var s; - var str, n; - var wrap; - var avail; - var next; - var input; - var tmpDict; - if (!strm || !strm.state) { - return Z_STREAM_ERROR; - } - s = strm.state; - wrap = s.wrap; - if (wrap === 2 || wrap === 1 && s.status !== INIT_STATE || s.lookahead) { - return Z_STREAM_ERROR; - } - if (wrap === 1) { - strm.adler = adler32(strm.adler, dictionary, dictLength, 0); - } - s.wrap = 0; - if (dictLength >= s.w_size) { - if (wrap === 0) { - zero(s.head); - s.strstart = 0; - s.block_start = 0; - s.insert = 0; - } - tmpDict = new utils.Buf8(s.w_size); - utils.arraySet(tmpDict, dictionary, dictLength - s.w_size, s.w_size, 0); - dictionary = tmpDict; - dictLength = s.w_size; - } - avail = strm.avail_in; - next = strm.next_in; - input = strm.input; - strm.avail_in = dictLength; - strm.next_in = 0; - strm.input = dictionary; - fill_window(s); - while (s.lookahead >= MIN_MATCH) { - str = s.strstart; - n = s.lookahead - (MIN_MATCH - 1); - do { - s.ins_h = (s.ins_h << s.hash_shift ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask; - s.prev[str & s.w_mask] = s.head[s.ins_h]; - s.head[s.ins_h] = str; - str++; - } while (--n); - s.strstart = str; - s.lookahead = MIN_MATCH - 1; - fill_window(s); - } - s.strstart += s.lookahead; - s.block_start = s.strstart; - s.insert = s.lookahead; - s.lookahead = 0; - s.match_length = s.prev_length = MIN_MATCH - 1; - s.match_available = 0; - strm.next_in = next; - strm.input = input; - strm.avail_in = avail; - s.wrap = wrap; - return Z_OK; - } - exports2.deflateInit = deflateInit; - exports2.deflateInit2 = deflateInit2; - exports2.deflateReset = deflateReset; - exports2.deflateResetKeep = deflateResetKeep; - exports2.deflateSetHeader = deflateSetHeader; - exports2.deflate = deflate2; - exports2.deflateEnd = deflateEnd; - exports2.deflateSetDictionary = deflateSetDictionary; - exports2.deflateInfo = "pako deflate (from Nodeca project)"; - } -}); - -// node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/utils/strings.js -var require_strings = __commonJS({ - "node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/utils/strings.js"(exports2) { - "use strict"; - init_polyfill_buffer(); - var utils = require_common(); - var STR_APPLY_OK = true; - var STR_APPLY_UIA_OK = true; - try { - String.fromCharCode.apply(null, [0]); - } catch (__) { - STR_APPLY_OK = false; - } - try { - String.fromCharCode.apply(null, new Uint8Array(1)); - } catch (__) { - STR_APPLY_UIA_OK = false; - } - var _utf8len = new utils.Buf8(256); - for (q = 0; q < 256; q++) { - _utf8len[q] = q >= 252 ? 6 : q >= 248 ? 5 : q >= 240 ? 4 : q >= 224 ? 3 : q >= 192 ? 2 : 1; - } - var q; - _utf8len[254] = _utf8len[254] = 1; - exports2.string2buf = function(str) { - var buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0; - for (m_pos = 0; m_pos < str_len; m_pos++) { - c = str.charCodeAt(m_pos); - if ((c & 64512) === 55296 && m_pos + 1 < str_len) { - c2 = str.charCodeAt(m_pos + 1); - if ((c2 & 64512) === 56320) { - c = 65536 + (c - 55296 << 10) + (c2 - 56320); - m_pos++; - } - } - buf_len += c < 128 ? 1 : c < 2048 ? 2 : c < 65536 ? 3 : 4; - } - buf = new utils.Buf8(buf_len); - for (i = 0, m_pos = 0; i < buf_len; m_pos++) { - c = str.charCodeAt(m_pos); - if ((c & 64512) === 55296 && m_pos + 1 < str_len) { - c2 = str.charCodeAt(m_pos + 1); - if ((c2 & 64512) === 56320) { - c = 65536 + (c - 55296 << 10) + (c2 - 56320); - m_pos++; - } - } - if (c < 128) { - buf[i++] = c; - } else if (c < 2048) { - buf[i++] = 192 | c >>> 6; - buf[i++] = 128 | c & 63; - } else if (c < 65536) { - buf[i++] = 224 | c >>> 12; - buf[i++] = 128 | c >>> 6 & 63; - buf[i++] = 128 | c & 63; - } else { - buf[i++] = 240 | c >>> 18; - buf[i++] = 128 | c >>> 12 & 63; - buf[i++] = 128 | c >>> 6 & 63; - buf[i++] = 128 | c & 63; - } - } - return buf; - }; - function buf2binstring(buf, len) { - if (len < 65534) { - if (buf.subarray && STR_APPLY_UIA_OK || !buf.subarray && STR_APPLY_OK) { - return String.fromCharCode.apply(null, utils.shrinkBuf(buf, len)); - } - } - var result = ""; - for (var i = 0; i < len; i++) { - result += String.fromCharCode(buf[i]); - } - return result; - } - exports2.buf2binstring = function(buf) { - return buf2binstring(buf, buf.length); - }; - exports2.binstring2buf = function(str) { - var buf = new utils.Buf8(str.length); - for (var i = 0, len = buf.length; i < len; i++) { - buf[i] = str.charCodeAt(i); - } - return buf; - }; - exports2.buf2string = function(buf, max) { - var i, out, c, c_len; - var len = max || buf.length; - var utf16buf = new Array(len * 2); - for (out = 0, i = 0; i < len; ) { - c = buf[i++]; - if (c < 128) { - utf16buf[out++] = c; - continue; - } - c_len = _utf8len[c]; - if (c_len > 4) { - utf16buf[out++] = 65533; - i += c_len - 1; - continue; - } - c &= c_len === 2 ? 31 : c_len === 3 ? 15 : 7; - while (c_len > 1 && i < len) { - c = c << 6 | buf[i++] & 63; - c_len--; - } - if (c_len > 1) { - utf16buf[out++] = 65533; - continue; - } - if (c < 65536) { - utf16buf[out++] = c; - } else { - c -= 65536; - utf16buf[out++] = 55296 | c >> 10 & 1023; - utf16buf[out++] = 56320 | c & 1023; - } - } - return buf2binstring(utf16buf, out); - }; - exports2.utf8border = function(buf, max) { - var pos; - max = max || buf.length; - if (max > buf.length) { - max = buf.length; - } - pos = max - 1; - while (pos >= 0 && (buf[pos] & 192) === 128) { - pos--; - } - if (pos < 0) { - return max; - } - if (pos === 0) { - return max; - } - return pos + _utf8len[buf[pos]] > max ? pos : max; - }; - } -}); - -// node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/zstream.js -var require_zstream = __commonJS({ - "node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/zstream.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - function ZStream() { - this.input = null; - this.next_in = 0; - this.avail_in = 0; - this.total_in = 0; - this.output = null; - this.next_out = 0; - this.avail_out = 0; - this.total_out = 0; - this.msg = ""; - this.state = null; - this.data_type = 2; - this.adler = 0; - } - module2.exports = ZStream; - } -}); - -// node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/deflate.js -var require_deflate2 = __commonJS({ - "node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/deflate.js"(exports2) { - "use strict"; - init_polyfill_buffer(); - var zlib_deflate = require_deflate(); - var utils = require_common(); - var strings = require_strings(); - var msg = require_messages(); - var ZStream = require_zstream(); - var toString = Object.prototype.toString; - var Z_NO_FLUSH = 0; - var Z_FINISH = 4; - var Z_OK = 0; - var Z_STREAM_END = 1; - var Z_SYNC_FLUSH = 2; - var Z_DEFAULT_COMPRESSION = -1; - var Z_DEFAULT_STRATEGY = 0; - var Z_DEFLATED = 8; - function Deflate(options) { - if (!(this instanceof Deflate)) - return new Deflate(options); - this.options = utils.assign({ - level: Z_DEFAULT_COMPRESSION, - method: Z_DEFLATED, - chunkSize: 16384, - windowBits: 15, - memLevel: 8, - strategy: Z_DEFAULT_STRATEGY, - to: "" - }, options || {}); - var opt = this.options; - if (opt.raw && opt.windowBits > 0) { - opt.windowBits = -opt.windowBits; - } else if (opt.gzip && opt.windowBits > 0 && opt.windowBits < 16) { - opt.windowBits += 16; - } - this.err = 0; - this.msg = ""; - this.ended = false; - this.chunks = []; - this.strm = new ZStream(); - this.strm.avail_out = 0; - var status2 = zlib_deflate.deflateInit2( - this.strm, - opt.level, - opt.method, - opt.windowBits, - opt.memLevel, - opt.strategy - ); - if (status2 !== Z_OK) { - throw new Error(msg[status2]); - } - if (opt.header) { - zlib_deflate.deflateSetHeader(this.strm, opt.header); - } - if (opt.dictionary) { - var dict; - if (typeof opt.dictionary === "string") { - dict = strings.string2buf(opt.dictionary); - } else if (toString.call(opt.dictionary) === "[object ArrayBuffer]") { - dict = new Uint8Array(opt.dictionary); - } else { - dict = opt.dictionary; - } - status2 = zlib_deflate.deflateSetDictionary(this.strm, dict); - if (status2 !== Z_OK) { - throw new Error(msg[status2]); - } - this._dict_set = true; - } - } - Deflate.prototype.push = function(data, mode) { - var strm = this.strm; - var chunkSize = this.options.chunkSize; - var status2, _mode; - if (this.ended) { - return false; - } - _mode = mode === ~~mode ? mode : mode === true ? Z_FINISH : Z_NO_FLUSH; - if (typeof data === "string") { - strm.input = strings.string2buf(data); - } else if (toString.call(data) === "[object ArrayBuffer]") { - strm.input = new Uint8Array(data); - } else { - strm.input = data; - } - strm.next_in = 0; - strm.avail_in = strm.input.length; - do { - if (strm.avail_out === 0) { - strm.output = new utils.Buf8(chunkSize); - strm.next_out = 0; - strm.avail_out = chunkSize; - } - status2 = zlib_deflate.deflate(strm, _mode); - if (status2 !== Z_STREAM_END && status2 !== Z_OK) { - this.onEnd(status2); - this.ended = true; - return false; - } - if (strm.avail_out === 0 || strm.avail_in === 0 && (_mode === Z_FINISH || _mode === Z_SYNC_FLUSH)) { - if (this.options.to === "string") { - this.onData(strings.buf2binstring(utils.shrinkBuf(strm.output, strm.next_out))); - } else { - this.onData(utils.shrinkBuf(strm.output, strm.next_out)); - } - } - } while ((strm.avail_in > 0 || strm.avail_out === 0) && status2 !== Z_STREAM_END); - if (_mode === Z_FINISH) { - status2 = zlib_deflate.deflateEnd(this.strm); - this.onEnd(status2); - this.ended = true; - return status2 === Z_OK; - } - if (_mode === Z_SYNC_FLUSH) { - this.onEnd(Z_OK); - strm.avail_out = 0; - return true; - } - return true; - }; - Deflate.prototype.onData = function(chunk) { - this.chunks.push(chunk); - }; - Deflate.prototype.onEnd = function(status2) { - if (status2 === Z_OK) { - if (this.options.to === "string") { - this.result = this.chunks.join(""); - } else { - this.result = utils.flattenChunks(this.chunks); - } - } - this.chunks = []; - this.err = status2; - this.msg = this.strm.msg; - }; - function deflate2(input, options) { - var deflator = new Deflate(options); - deflator.push(input, true); - if (deflator.err) { - throw deflator.msg || msg[deflator.err]; - } - return deflator.result; - } - function deflateRaw(input, options) { - options = options || {}; - options.raw = true; - return deflate2(input, options); - } - function gzip(input, options) { - options = options || {}; - options.gzip = true; - return deflate2(input, options); - } - exports2.Deflate = Deflate; - exports2.deflate = deflate2; - exports2.deflateRaw = deflateRaw; - exports2.gzip = gzip; - } -}); - -// node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/inffast.js -var require_inffast = __commonJS({ - "node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/inffast.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - var BAD = 30; - var TYPE = 12; - module2.exports = function inflate_fast(strm, start) { - var state; - var _in; - var last2; - var _out; - var beg; - var end; - var dmax; - var wsize; - var whave; - var wnext; - var s_window; - var hold; - var bits; - var lcode; - var dcode; - var lmask; - var dmask; - var here; - var op; - var len; - var dist; - var from; - var from_source; - var input, output; - state = strm.state; - _in = strm.next_in; - input = strm.input; - last2 = _in + (strm.avail_in - 5); - _out = strm.next_out; - output = strm.output; - beg = _out - (start - strm.avail_out); - end = _out + (strm.avail_out - 257); - dmax = state.dmax; - wsize = state.wsize; - whave = state.whave; - wnext = state.wnext; - s_window = state.window; - hold = state.hold; - bits = state.bits; - lcode = state.lencode; - dcode = state.distcode; - lmask = (1 << state.lenbits) - 1; - dmask = (1 << state.distbits) - 1; - top: - do { - if (bits < 15) { - hold += input[_in++] << bits; - bits += 8; - hold += input[_in++] << bits; - bits += 8; - } - here = lcode[hold & lmask]; - dolen: - for (; ; ) { - op = here >>> 24; - hold >>>= op; - bits -= op; - op = here >>> 16 & 255; - if (op === 0) { - output[_out++] = here & 65535; - } else if (op & 16) { - len = here & 65535; - op &= 15; - if (op) { - if (bits < op) { - hold += input[_in++] << bits; - bits += 8; - } - len += hold & (1 << op) - 1; - hold >>>= op; - bits -= op; - } - if (bits < 15) { - hold += input[_in++] << bits; - bits += 8; - hold += input[_in++] << bits; - bits += 8; - } - here = dcode[hold & dmask]; - dodist: - for (; ; ) { - op = here >>> 24; - hold >>>= op; - bits -= op; - op = here >>> 16 & 255; - if (op & 16) { - dist = here & 65535; - op &= 15; - if (bits < op) { - hold += input[_in++] << bits; - bits += 8; - if (bits < op) { - hold += input[_in++] << bits; - bits += 8; - } - } - dist += hold & (1 << op) - 1; - if (dist > dmax) { - strm.msg = "invalid distance too far back"; - state.mode = BAD; - break top; - } - hold >>>= op; - bits -= op; - op = _out - beg; - if (dist > op) { - op = dist - op; - if (op > whave) { - if (state.sane) { - strm.msg = "invalid distance too far back"; - state.mode = BAD; - break top; - } - } - from = 0; - from_source = s_window; - if (wnext === 0) { - from += wsize - op; - if (op < len) { - len -= op; - do { - output[_out++] = s_window[from++]; - } while (--op); - from = _out - dist; - from_source = output; - } - } else if (wnext < op) { - from += wsize + wnext - op; - op -= wnext; - if (op < len) { - len -= op; - do { - output[_out++] = s_window[from++]; - } while (--op); - from = 0; - if (wnext < len) { - op = wnext; - len -= op; - do { - output[_out++] = s_window[from++]; - } while (--op); - from = _out - dist; - from_source = output; - } - } - } else { - from += wnext - op; - if (op < len) { - len -= op; - do { - output[_out++] = s_window[from++]; - } while (--op); - from = _out - dist; - from_source = output; - } - } - while (len > 2) { - output[_out++] = from_source[from++]; - output[_out++] = from_source[from++]; - output[_out++] = from_source[from++]; - len -= 3; - } - if (len) { - output[_out++] = from_source[from++]; - if (len > 1) { - output[_out++] = from_source[from++]; - } - } - } else { - from = _out - dist; - do { - output[_out++] = output[from++]; - output[_out++] = output[from++]; - output[_out++] = output[from++]; - len -= 3; - } while (len > 2); - if (len) { - output[_out++] = output[from++]; - if (len > 1) { - output[_out++] = output[from++]; - } - } - } - } else if ((op & 64) === 0) { - here = dcode[(here & 65535) + (hold & (1 << op) - 1)]; - continue dodist; - } else { - strm.msg = "invalid distance code"; - state.mode = BAD; - break top; - } - break; - } - } else if ((op & 64) === 0) { - here = lcode[(here & 65535) + (hold & (1 << op) - 1)]; - continue dolen; - } else if (op & 32) { - state.mode = TYPE; - break top; - } else { - strm.msg = "invalid literal/length code"; - state.mode = BAD; - break top; - } - break; - } - } while (_in < last2 && _out < end); - len = bits >> 3; - _in -= len; - bits -= len << 3; - hold &= (1 << bits) - 1; - strm.next_in = _in; - strm.next_out = _out; - strm.avail_in = _in < last2 ? 5 + (last2 - _in) : 5 - (_in - last2); - strm.avail_out = _out < end ? 257 + (end - _out) : 257 - (_out - end); - state.hold = hold; - state.bits = bits; - return; - }; - } -}); - -// node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/inftrees.js -var require_inftrees = __commonJS({ - "node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/inftrees.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - var utils = require_common(); - var MAXBITS = 15; - var ENOUGH_LENS = 852; - var ENOUGH_DISTS = 592; - var CODES = 0; - var LENS = 1; - var DISTS = 2; - var lbase = [ - /* Length codes 257..285 base */ - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 13, - 15, - 17, - 19, - 23, - 27, - 31, - 35, - 43, - 51, - 59, - 67, - 83, - 99, - 115, - 131, - 163, - 195, - 227, - 258, - 0, - 0 - ]; - var lext = [ - /* Length codes 257..285 extra */ - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 17, - 17, - 17, - 17, - 18, - 18, - 18, - 18, - 19, - 19, - 19, - 19, - 20, - 20, - 20, - 20, - 21, - 21, - 21, - 21, - 16, - 72, - 78 - ]; - var dbase = [ - /* Distance codes 0..29 base */ - 1, - 2, - 3, - 4, - 5, - 7, - 9, - 13, - 17, - 25, - 33, - 49, - 65, - 97, - 129, - 193, - 257, - 385, - 513, - 769, - 1025, - 1537, - 2049, - 3073, - 4097, - 6145, - 8193, - 12289, - 16385, - 24577, - 0, - 0 - ]; - var dext = [ - /* Distance codes 0..29 extra */ - 16, - 16, - 16, - 16, - 17, - 17, - 18, - 18, - 19, - 19, - 20, - 20, - 21, - 21, - 22, - 22, - 23, - 23, - 24, - 24, - 25, - 25, - 26, - 26, - 27, - 27, - 28, - 28, - 29, - 29, - 64, - 64 - ]; - module2.exports = function inflate_table(type, lens, lens_index, codes, table, table_index, work, opts) { - var bits = opts.bits; - var len = 0; - var sym = 0; - var min = 0, max = 0; - var root2 = 0; - var curr = 0; - var drop = 0; - var left = 0; - var used = 0; - var huff = 0; - var incr; - var fill; - var low; - var mask; - var next; - var base = null; - var base_index = 0; - var end; - var count = new utils.Buf16(MAXBITS + 1); - var offs = new utils.Buf16(MAXBITS + 1); - var extra = null; - var extra_index = 0; - var here_bits, here_op, here_val; - for (len = 0; len <= MAXBITS; len++) { - count[len] = 0; - } - for (sym = 0; sym < codes; sym++) { - count[lens[lens_index + sym]]++; - } - root2 = bits; - for (max = MAXBITS; max >= 1; max--) { - if (count[max] !== 0) { - break; - } - } - if (root2 > max) { - root2 = max; - } - if (max === 0) { - table[table_index++] = 1 << 24 | 64 << 16 | 0; - table[table_index++] = 1 << 24 | 64 << 16 | 0; - opts.bits = 1; - return 0; - } - for (min = 1; min < max; min++) { - if (count[min] !== 0) { - break; - } - } - if (root2 < min) { - root2 = min; - } - left = 1; - for (len = 1; len <= MAXBITS; len++) { - left <<= 1; - left -= count[len]; - if (left < 0) { - return -1; - } - } - if (left > 0 && (type === CODES || max !== 1)) { - return -1; - } - offs[1] = 0; - for (len = 1; len < MAXBITS; len++) { - offs[len + 1] = offs[len] + count[len]; - } - for (sym = 0; sym < codes; sym++) { - if (lens[lens_index + sym] !== 0) { - work[offs[lens[lens_index + sym]]++] = sym; - } - } - if (type === CODES) { - base = extra = work; - end = 19; - } else if (type === LENS) { - base = lbase; - base_index -= 257; - extra = lext; - extra_index -= 257; - end = 256; - } else { - base = dbase; - extra = dext; - end = -1; - } - huff = 0; - sym = 0; - len = min; - next = table_index; - curr = root2; - drop = 0; - low = -1; - used = 1 << root2; - mask = used - 1; - if (type === LENS && used > ENOUGH_LENS || type === DISTS && used > ENOUGH_DISTS) { - return 1; - } - for (; ; ) { - here_bits = len - drop; - if (work[sym] < end) { - here_op = 0; - here_val = work[sym]; - } else if (work[sym] > end) { - here_op = extra[extra_index + work[sym]]; - here_val = base[base_index + work[sym]]; - } else { - here_op = 32 + 64; - here_val = 0; - } - incr = 1 << len - drop; - fill = 1 << curr; - min = fill; - do { - fill -= incr; - table[next + (huff >> drop) + fill] = here_bits << 24 | here_op << 16 | here_val | 0; - } while (fill !== 0); - incr = 1 << len - 1; - while (huff & incr) { - incr >>= 1; - } - if (incr !== 0) { - huff &= incr - 1; - huff += incr; - } else { - huff = 0; - } - sym++; - if (--count[len] === 0) { - if (len === max) { - break; - } - len = lens[lens_index + work[sym]]; - } - if (len > root2 && (huff & mask) !== low) { - if (drop === 0) { - drop = root2; - } - next += min; - curr = len - drop; - left = 1 << curr; - while (curr + drop < max) { - left -= count[curr + drop]; - if (left <= 0) { - break; - } - curr++; - left <<= 1; - } - used += 1 << curr; - if (type === LENS && used > ENOUGH_LENS || type === DISTS && used > ENOUGH_DISTS) { - return 1; - } - low = huff & mask; - table[low] = root2 << 24 | curr << 16 | next - table_index | 0; - } - } - if (huff !== 0) { - table[next + huff] = len - drop << 24 | 64 << 16 | 0; - } - opts.bits = root2; - return 0; - }; - } -}); - -// node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/inflate.js -var require_inflate = __commonJS({ - "node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/inflate.js"(exports2) { - "use strict"; - init_polyfill_buffer(); - var utils = require_common(); - var adler32 = require_adler32(); - var crc322 = require_crc322(); - var inflate_fast = require_inffast(); - var inflate_table = require_inftrees(); - var CODES = 0; - var LENS = 1; - var DISTS = 2; - var Z_FINISH = 4; - var Z_BLOCK = 5; - var Z_TREES = 6; - var Z_OK = 0; - var Z_STREAM_END = 1; - var Z_NEED_DICT = 2; - var Z_STREAM_ERROR = -2; - var Z_DATA_ERROR = -3; - var Z_MEM_ERROR = -4; - var Z_BUF_ERROR = -5; - var Z_DEFLATED = 8; - var HEAD = 1; - var FLAGS = 2; - var TIME = 3; - var OS = 4; - var EXLEN = 5; - var EXTRA2 = 6; - var NAME = 7; - var COMMENT = 8; - var HCRC = 9; - var DICTID = 10; - var DICT = 11; - var TYPE = 12; - var TYPEDO = 13; - var STORED = 14; - var COPY_ = 15; - var COPY = 16; - var TABLE = 17; - var LENLENS = 18; - var CODELENS = 19; - var LEN_ = 20; - var LEN = 21; - var LENEXT = 22; - var DIST = 23; - var DISTEXT = 24; - var MATCH = 25; - var LIT = 26; - var CHECK = 27; - var LENGTH = 28; - var DONE = 29; - var BAD = 30; - var MEM = 31; - var SYNC = 32; - var ENOUGH_LENS = 852; - var ENOUGH_DISTS = 592; - var MAX_WBITS = 15; - var DEF_WBITS = MAX_WBITS; - function zswap32(q) { - return (q >>> 24 & 255) + (q >>> 8 & 65280) + ((q & 65280) << 8) + ((q & 255) << 24); - } - function InflateState() { - this.mode = 0; - this.last = false; - this.wrap = 0; - this.havedict = false; - this.flags = 0; - this.dmax = 0; - this.check = 0; - this.total = 0; - this.head = null; - this.wbits = 0; - this.wsize = 0; - this.whave = 0; - this.wnext = 0; - this.window = null; - this.hold = 0; - this.bits = 0; - this.length = 0; - this.offset = 0; - this.extra = 0; - this.lencode = null; - this.distcode = null; - this.lenbits = 0; - this.distbits = 0; - this.ncode = 0; - this.nlen = 0; - this.ndist = 0; - this.have = 0; - this.next = null; - this.lens = new utils.Buf16(320); - this.work = new utils.Buf16(288); - this.lendyn = null; - this.distdyn = null; - this.sane = 0; - this.back = 0; - this.was = 0; - } - function inflateResetKeep(strm) { - var state; - if (!strm || !strm.state) { - return Z_STREAM_ERROR; - } - state = strm.state; - strm.total_in = strm.total_out = state.total = 0; - strm.msg = ""; - if (state.wrap) { - strm.adler = state.wrap & 1; - } - state.mode = HEAD; - state.last = 0; - state.havedict = 0; - state.dmax = 32768; - state.head = null; - state.hold = 0; - state.bits = 0; - state.lencode = state.lendyn = new utils.Buf32(ENOUGH_LENS); - state.distcode = state.distdyn = new utils.Buf32(ENOUGH_DISTS); - state.sane = 1; - state.back = -1; - return Z_OK; - } - function inflateReset(strm) { - var state; - if (!strm || !strm.state) { - return Z_STREAM_ERROR; - } - state = strm.state; - state.wsize = 0; - state.whave = 0; - state.wnext = 0; - return inflateResetKeep(strm); - } - function inflateReset2(strm, windowBits) { - var wrap; - var state; - if (!strm || !strm.state) { - return Z_STREAM_ERROR; - } - state = strm.state; - if (windowBits < 0) { - wrap = 0; - windowBits = -windowBits; - } else { - wrap = (windowBits >> 4) + 1; - if (windowBits < 48) { - windowBits &= 15; - } - } - if (windowBits && (windowBits < 8 || windowBits > 15)) { - return Z_STREAM_ERROR; - } - if (state.window !== null && state.wbits !== windowBits) { - state.window = null; - } - state.wrap = wrap; - state.wbits = windowBits; - return inflateReset(strm); - } - function inflateInit2(strm, windowBits) { - var ret; - var state; - if (!strm) { - return Z_STREAM_ERROR; - } - state = new InflateState(); - strm.state = state; - state.window = null; - ret = inflateReset2(strm, windowBits); - if (ret !== Z_OK) { - strm.state = null; - } - return ret; - } - function inflateInit(strm) { - return inflateInit2(strm, DEF_WBITS); - } - var virgin = true; - var lenfix; - var distfix; - function fixedtables(state) { - if (virgin) { - var sym; - lenfix = new utils.Buf32(512); - distfix = new utils.Buf32(32); - sym = 0; - while (sym < 144) { - state.lens[sym++] = 8; - } - while (sym < 256) { - state.lens[sym++] = 9; - } - while (sym < 280) { - state.lens[sym++] = 7; - } - while (sym < 288) { - state.lens[sym++] = 8; - } - inflate_table(LENS, state.lens, 0, 288, lenfix, 0, state.work, { bits: 9 }); - sym = 0; - while (sym < 32) { - state.lens[sym++] = 5; - } - inflate_table(DISTS, state.lens, 0, 32, distfix, 0, state.work, { bits: 5 }); - virgin = false; - } - state.lencode = lenfix; - state.lenbits = 9; - state.distcode = distfix; - state.distbits = 5; - } - function updatewindow(strm, src, end, copy2) { - var dist; - var state = strm.state; - if (state.window === null) { - state.wsize = 1 << state.wbits; - state.wnext = 0; - state.whave = 0; - state.window = new utils.Buf8(state.wsize); - } - if (copy2 >= state.wsize) { - utils.arraySet(state.window, src, end - state.wsize, state.wsize, 0); - state.wnext = 0; - state.whave = state.wsize; - } else { - dist = state.wsize - state.wnext; - if (dist > copy2) { - dist = copy2; - } - utils.arraySet(state.window, src, end - copy2, dist, state.wnext); - copy2 -= dist; - if (copy2) { - utils.arraySet(state.window, src, end - copy2, copy2, 0); - state.wnext = copy2; - state.whave = state.wsize; - } else { - state.wnext += dist; - if (state.wnext === state.wsize) { - state.wnext = 0; - } - if (state.whave < state.wsize) { - state.whave += dist; - } - } - } - return 0; - } - function inflate2(strm, flush2) { - var state; - var input, output; - var next; - var put; - var have, left; - var hold; - var bits; - var _in, _out; - var copy2; - var from; - var from_source; - var here = 0; - var here_bits, here_op, here_val; - var last_bits, last_op, last_val; - var len; - var ret; - var hbuf = new utils.Buf8(4); - var opts; - var n; - var order = ( - /* permutation of code lengths */ - [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15] - ); - if (!strm || !strm.state || !strm.output || !strm.input && strm.avail_in !== 0) { - return Z_STREAM_ERROR; - } - state = strm.state; - if (state.mode === TYPE) { - state.mode = TYPEDO; - } - put = strm.next_out; - output = strm.output; - left = strm.avail_out; - next = strm.next_in; - input = strm.input; - have = strm.avail_in; - hold = state.hold; - bits = state.bits; - _in = have; - _out = left; - ret = Z_OK; - inf_leave: - for (; ; ) { - switch (state.mode) { - case HEAD: - if (state.wrap === 0) { - state.mode = TYPEDO; - break; - } - while (bits < 16) { - if (have === 0) { - break inf_leave; - } - have--; - hold += input[next++] << bits; - bits += 8; - } - if (state.wrap & 2 && hold === 35615) { - state.check = 0; - hbuf[0] = hold & 255; - hbuf[1] = hold >>> 8 & 255; - state.check = crc322(state.check, hbuf, 2, 0); - hold = 0; - bits = 0; - state.mode = FLAGS; - break; - } - state.flags = 0; - if (state.head) { - state.head.done = false; - } - if (!(state.wrap & 1) || /* check if zlib header allowed */ - (((hold & 255) << 8) + (hold >> 8)) % 31) { - strm.msg = "incorrect header check"; - state.mode = BAD; - break; - } - if ((hold & 15) !== Z_DEFLATED) { - strm.msg = "unknown compression method"; - state.mode = BAD; - break; - } - hold >>>= 4; - bits -= 4; - len = (hold & 15) + 8; - if (state.wbits === 0) { - state.wbits = len; - } else if (len > state.wbits) { - strm.msg = "invalid window size"; - state.mode = BAD; - break; - } - state.dmax = 1 << len; - strm.adler = state.check = 1; - state.mode = hold & 512 ? DICTID : TYPE; - hold = 0; - bits = 0; - break; - case FLAGS: - while (bits < 16) { - if (have === 0) { - break inf_leave; - } - have--; - hold += input[next++] << bits; - bits += 8; - } - state.flags = hold; - if ((state.flags & 255) !== Z_DEFLATED) { - strm.msg = "unknown compression method"; - state.mode = BAD; - break; - } - if (state.flags & 57344) { - strm.msg = "unknown header flags set"; - state.mode = BAD; - break; - } - if (state.head) { - state.head.text = hold >> 8 & 1; - } - if (state.flags & 512) { - hbuf[0] = hold & 255; - hbuf[1] = hold >>> 8 & 255; - state.check = crc322(state.check, hbuf, 2, 0); - } - hold = 0; - bits = 0; - state.mode = TIME; - case TIME: - while (bits < 32) { - if (have === 0) { - break inf_leave; - } - have--; - hold += input[next++] << bits; - bits += 8; - } - if (state.head) { - state.head.time = hold; - } - if (state.flags & 512) { - hbuf[0] = hold & 255; - hbuf[1] = hold >>> 8 & 255; - hbuf[2] = hold >>> 16 & 255; - hbuf[3] = hold >>> 24 & 255; - state.check = crc322(state.check, hbuf, 4, 0); - } - hold = 0; - bits = 0; - state.mode = OS; - case OS: - while (bits < 16) { - if (have === 0) { - break inf_leave; - } - have--; - hold += input[next++] << bits; - bits += 8; - } - if (state.head) { - state.head.xflags = hold & 255; - state.head.os = hold >> 8; - } - if (state.flags & 512) { - hbuf[0] = hold & 255; - hbuf[1] = hold >>> 8 & 255; - state.check = crc322(state.check, hbuf, 2, 0); - } - hold = 0; - bits = 0; - state.mode = EXLEN; - case EXLEN: - if (state.flags & 1024) { - while (bits < 16) { - if (have === 0) { - break inf_leave; - } - have--; - hold += input[next++] << bits; - bits += 8; - } - state.length = hold; - if (state.head) { - state.head.extra_len = hold; - } - if (state.flags & 512) { - hbuf[0] = hold & 255; - hbuf[1] = hold >>> 8 & 255; - state.check = crc322(state.check, hbuf, 2, 0); - } - hold = 0; - bits = 0; - } else if (state.head) { - state.head.extra = null; - } - state.mode = EXTRA2; - case EXTRA2: - if (state.flags & 1024) { - copy2 = state.length; - if (copy2 > have) { - copy2 = have; - } - if (copy2) { - if (state.head) { - len = state.head.extra_len - state.length; - if (!state.head.extra) { - state.head.extra = new Array(state.head.extra_len); - } - utils.arraySet( - state.head.extra, - input, - next, - // extra field is limited to 65536 bytes - // - no need for additional size check - copy2, - /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/ - len - ); - } - if (state.flags & 512) { - state.check = crc322(state.check, input, copy2, next); - } - have -= copy2; - next += copy2; - state.length -= copy2; - } - if (state.length) { - break inf_leave; - } - } - state.length = 0; - state.mode = NAME; - case NAME: - if (state.flags & 2048) { - if (have === 0) { - break inf_leave; - } - copy2 = 0; - do { - len = input[next + copy2++]; - if (state.head && len && state.length < 65536) { - state.head.name += String.fromCharCode(len); - } - } while (len && copy2 < have); - if (state.flags & 512) { - state.check = crc322(state.check, input, copy2, next); - } - have -= copy2; - next += copy2; - if (len) { - break inf_leave; - } - } else if (state.head) { - state.head.name = null; - } - state.length = 0; - state.mode = COMMENT; - case COMMENT: - if (state.flags & 4096) { - if (have === 0) { - break inf_leave; - } - copy2 = 0; - do { - len = input[next + copy2++]; - if (state.head && len && state.length < 65536) { - state.head.comment += String.fromCharCode(len); - } - } while (len && copy2 < have); - if (state.flags & 512) { - state.check = crc322(state.check, input, copy2, next); - } - have -= copy2; - next += copy2; - if (len) { - break inf_leave; - } - } else if (state.head) { - state.head.comment = null; - } - state.mode = HCRC; - case HCRC: - if (state.flags & 512) { - while (bits < 16) { - if (have === 0) { - break inf_leave; - } - have--; - hold += input[next++] << bits; - bits += 8; - } - if (hold !== (state.check & 65535)) { - strm.msg = "header crc mismatch"; - state.mode = BAD; - break; - } - hold = 0; - bits = 0; - } - if (state.head) { - state.head.hcrc = state.flags >> 9 & 1; - state.head.done = true; - } - strm.adler = state.check = 0; - state.mode = TYPE; - break; - case DICTID: - while (bits < 32) { - if (have === 0) { - break inf_leave; - } - have--; - hold += input[next++] << bits; - bits += 8; - } - strm.adler = state.check = zswap32(hold); - hold = 0; - bits = 0; - state.mode = DICT; - case DICT: - if (state.havedict === 0) { - strm.next_out = put; - strm.avail_out = left; - strm.next_in = next; - strm.avail_in = have; - state.hold = hold; - state.bits = bits; - return Z_NEED_DICT; - } - strm.adler = state.check = 1; - state.mode = TYPE; - case TYPE: - if (flush2 === Z_BLOCK || flush2 === Z_TREES) { - break inf_leave; - } - case TYPEDO: - if (state.last) { - hold >>>= bits & 7; - bits -= bits & 7; - state.mode = CHECK; - break; - } - while (bits < 3) { - if (have === 0) { - break inf_leave; - } - have--; - hold += input[next++] << bits; - bits += 8; - } - state.last = hold & 1; - hold >>>= 1; - bits -= 1; - switch (hold & 3) { - case 0: - state.mode = STORED; - break; - case 1: - fixedtables(state); - state.mode = LEN_; - if (flush2 === Z_TREES) { - hold >>>= 2; - bits -= 2; - break inf_leave; - } - break; - case 2: - state.mode = TABLE; - break; - case 3: - strm.msg = "invalid block type"; - state.mode = BAD; - } - hold >>>= 2; - bits -= 2; - break; - case STORED: - hold >>>= bits & 7; - bits -= bits & 7; - while (bits < 32) { - if (have === 0) { - break inf_leave; - } - have--; - hold += input[next++] << bits; - bits += 8; - } - if ((hold & 65535) !== (hold >>> 16 ^ 65535)) { - strm.msg = "invalid stored block lengths"; - state.mode = BAD; - break; - } - state.length = hold & 65535; - hold = 0; - bits = 0; - state.mode = COPY_; - if (flush2 === Z_TREES) { - break inf_leave; - } - case COPY_: - state.mode = COPY; - case COPY: - copy2 = state.length; - if (copy2) { - if (copy2 > have) { - copy2 = have; - } - if (copy2 > left) { - copy2 = left; - } - if (copy2 === 0) { - break inf_leave; - } - utils.arraySet(output, input, next, copy2, put); - have -= copy2; - next += copy2; - left -= copy2; - put += copy2; - state.length -= copy2; - break; - } - state.mode = TYPE; - break; - case TABLE: - while (bits < 14) { - if (have === 0) { - break inf_leave; - } - have--; - hold += input[next++] << bits; - bits += 8; - } - state.nlen = (hold & 31) + 257; - hold >>>= 5; - bits -= 5; - state.ndist = (hold & 31) + 1; - hold >>>= 5; - bits -= 5; - state.ncode = (hold & 15) + 4; - hold >>>= 4; - bits -= 4; - if (state.nlen > 286 || state.ndist > 30) { - strm.msg = "too many length or distance symbols"; - state.mode = BAD; - break; - } - state.have = 0; - state.mode = LENLENS; - case LENLENS: - while (state.have < state.ncode) { - while (bits < 3) { - if (have === 0) { - break inf_leave; - } - have--; - hold += input[next++] << bits; - bits += 8; - } - state.lens[order[state.have++]] = hold & 7; - hold >>>= 3; - bits -= 3; - } - while (state.have < 19) { - state.lens[order[state.have++]] = 0; - } - state.lencode = state.lendyn; - state.lenbits = 7; - opts = { bits: state.lenbits }; - ret = inflate_table(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts); - state.lenbits = opts.bits; - if (ret) { - strm.msg = "invalid code lengths set"; - state.mode = BAD; - break; - } - state.have = 0; - state.mode = CODELENS; - case CODELENS: - while (state.have < state.nlen + state.ndist) { - for (; ; ) { - here = state.lencode[hold & (1 << state.lenbits) - 1]; - here_bits = here >>> 24; - here_op = here >>> 16 & 255; - here_val = here & 65535; - if (here_bits <= bits) { - break; - } - if (have === 0) { - break inf_leave; - } - have--; - hold += input[next++] << bits; - bits += 8; - } - if (here_val < 16) { - hold >>>= here_bits; - bits -= here_bits; - state.lens[state.have++] = here_val; - } else { - if (here_val === 16) { - n = here_bits + 2; - while (bits < n) { - if (have === 0) { - break inf_leave; - } - have--; - hold += input[next++] << bits; - bits += 8; - } - hold >>>= here_bits; - bits -= here_bits; - if (state.have === 0) { - strm.msg = "invalid bit length repeat"; - state.mode = BAD; - break; - } - len = state.lens[state.have - 1]; - copy2 = 3 + (hold & 3); - hold >>>= 2; - bits -= 2; - } else if (here_val === 17) { - n = here_bits + 3; - while (bits < n) { - if (have === 0) { - break inf_leave; - } - have--; - hold += input[next++] << bits; - bits += 8; - } - hold >>>= here_bits; - bits -= here_bits; - len = 0; - copy2 = 3 + (hold & 7); - hold >>>= 3; - bits -= 3; - } else { - n = here_bits + 7; - while (bits < n) { - if (have === 0) { - break inf_leave; - } - have--; - hold += input[next++] << bits; - bits += 8; - } - hold >>>= here_bits; - bits -= here_bits; - len = 0; - copy2 = 11 + (hold & 127); - hold >>>= 7; - bits -= 7; - } - if (state.have + copy2 > state.nlen + state.ndist) { - strm.msg = "invalid bit length repeat"; - state.mode = BAD; - break; - } - while (copy2--) { - state.lens[state.have++] = len; - } - } - } - if (state.mode === BAD) { - break; - } - if (state.lens[256] === 0) { - strm.msg = "invalid code -- missing end-of-block"; - state.mode = BAD; - break; - } - state.lenbits = 9; - opts = { bits: state.lenbits }; - ret = inflate_table(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts); - state.lenbits = opts.bits; - if (ret) { - strm.msg = "invalid literal/lengths set"; - state.mode = BAD; - break; - } - state.distbits = 6; - state.distcode = state.distdyn; - opts = { bits: state.distbits }; - ret = inflate_table(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts); - state.distbits = opts.bits; - if (ret) { - strm.msg = "invalid distances set"; - state.mode = BAD; - break; - } - state.mode = LEN_; - if (flush2 === Z_TREES) { - break inf_leave; - } - case LEN_: - state.mode = LEN; - case LEN: - if (have >= 6 && left >= 258) { - strm.next_out = put; - strm.avail_out = left; - strm.next_in = next; - strm.avail_in = have; - state.hold = hold; - state.bits = bits; - inflate_fast(strm, _out); - put = strm.next_out; - output = strm.output; - left = strm.avail_out; - next = strm.next_in; - input = strm.input; - have = strm.avail_in; - hold = state.hold; - bits = state.bits; - if (state.mode === TYPE) { - state.back = -1; - } - break; - } - state.back = 0; - for (; ; ) { - here = state.lencode[hold & (1 << state.lenbits) - 1]; - here_bits = here >>> 24; - here_op = here >>> 16 & 255; - here_val = here & 65535; - if (here_bits <= bits) { - break; - } - if (have === 0) { - break inf_leave; - } - have--; - hold += input[next++] << bits; - bits += 8; - } - if (here_op && (here_op & 240) === 0) { - last_bits = here_bits; - last_op = here_op; - last_val = here_val; - for (; ; ) { - here = state.lencode[last_val + ((hold & (1 << last_bits + last_op) - 1) >> last_bits)]; - here_bits = here >>> 24; - here_op = here >>> 16 & 255; - here_val = here & 65535; - if (last_bits + here_bits <= bits) { - break; - } - if (have === 0) { - break inf_leave; - } - have--; - hold += input[next++] << bits; - bits += 8; - } - hold >>>= last_bits; - bits -= last_bits; - state.back += last_bits; - } - hold >>>= here_bits; - bits -= here_bits; - state.back += here_bits; - state.length = here_val; - if (here_op === 0) { - state.mode = LIT; - break; - } - if (here_op & 32) { - state.back = -1; - state.mode = TYPE; - break; - } - if (here_op & 64) { - strm.msg = "invalid literal/length code"; - state.mode = BAD; - break; - } - state.extra = here_op & 15; - state.mode = LENEXT; - case LENEXT: - if (state.extra) { - n = state.extra; - while (bits < n) { - if (have === 0) { - break inf_leave; - } - have--; - hold += input[next++] << bits; - bits += 8; - } - state.length += hold & (1 << state.extra) - 1; - hold >>>= state.extra; - bits -= state.extra; - state.back += state.extra; - } - state.was = state.length; - state.mode = DIST; - case DIST: - for (; ; ) { - here = state.distcode[hold & (1 << state.distbits) - 1]; - here_bits = here >>> 24; - here_op = here >>> 16 & 255; - here_val = here & 65535; - if (here_bits <= bits) { - break; - } - if (have === 0) { - break inf_leave; - } - have--; - hold += input[next++] << bits; - bits += 8; - } - if ((here_op & 240) === 0) { - last_bits = here_bits; - last_op = here_op; - last_val = here_val; - for (; ; ) { - here = state.distcode[last_val + ((hold & (1 << last_bits + last_op) - 1) >> last_bits)]; - here_bits = here >>> 24; - here_op = here >>> 16 & 255; - here_val = here & 65535; - if (last_bits + here_bits <= bits) { - break; - } - if (have === 0) { - break inf_leave; - } - have--; - hold += input[next++] << bits; - bits += 8; - } - hold >>>= last_bits; - bits -= last_bits; - state.back += last_bits; - } - hold >>>= here_bits; - bits -= here_bits; - state.back += here_bits; - if (here_op & 64) { - strm.msg = "invalid distance code"; - state.mode = BAD; - break; - } - state.offset = here_val; - state.extra = here_op & 15; - state.mode = DISTEXT; - case DISTEXT: - if (state.extra) { - n = state.extra; - while (bits < n) { - if (have === 0) { - break inf_leave; - } - have--; - hold += input[next++] << bits; - bits += 8; - } - state.offset += hold & (1 << state.extra) - 1; - hold >>>= state.extra; - bits -= state.extra; - state.back += state.extra; - } - if (state.offset > state.dmax) { - strm.msg = "invalid distance too far back"; - state.mode = BAD; - break; - } - state.mode = MATCH; - case MATCH: - if (left === 0) { - break inf_leave; - } - copy2 = _out - left; - if (state.offset > copy2) { - copy2 = state.offset - copy2; - if (copy2 > state.whave) { - if (state.sane) { - strm.msg = "invalid distance too far back"; - state.mode = BAD; - break; - } - } - if (copy2 > state.wnext) { - copy2 -= state.wnext; - from = state.wsize - copy2; - } else { - from = state.wnext - copy2; - } - if (copy2 > state.length) { - copy2 = state.length; - } - from_source = state.window; - } else { - from_source = output; - from = put - state.offset; - copy2 = state.length; - } - if (copy2 > left) { - copy2 = left; - } - left -= copy2; - state.length -= copy2; - do { - output[put++] = from_source[from++]; - } while (--copy2); - if (state.length === 0) { - state.mode = LEN; - } - break; - case LIT: - if (left === 0) { - break inf_leave; - } - output[put++] = state.length; - left--; - state.mode = LEN; - break; - case CHECK: - if (state.wrap) { - while (bits < 32) { - if (have === 0) { - break inf_leave; - } - have--; - hold |= input[next++] << bits; - bits += 8; - } - _out -= left; - strm.total_out += _out; - state.total += _out; - if (_out) { - strm.adler = state.check = /*UPDATE(state.check, put - _out, _out);*/ - state.flags ? crc322(state.check, output, _out, put - _out) : adler32(state.check, output, _out, put - _out); - } - _out = left; - if ((state.flags ? hold : zswap32(hold)) !== state.check) { - strm.msg = "incorrect data check"; - state.mode = BAD; - break; - } - hold = 0; - bits = 0; - } - state.mode = LENGTH; - case LENGTH: - if (state.wrap && state.flags) { - while (bits < 32) { - if (have === 0) { - break inf_leave; - } - have--; - hold += input[next++] << bits; - bits += 8; - } - if (hold !== (state.total & 4294967295)) { - strm.msg = "incorrect length check"; - state.mode = BAD; - break; - } - hold = 0; - bits = 0; - } - state.mode = DONE; - case DONE: - ret = Z_STREAM_END; - break inf_leave; - case BAD: - ret = Z_DATA_ERROR; - break inf_leave; - case MEM: - return Z_MEM_ERROR; - case SYNC: - default: - return Z_STREAM_ERROR; - } - } - strm.next_out = put; - strm.avail_out = left; - strm.next_in = next; - strm.avail_in = have; - state.hold = hold; - state.bits = bits; - if (state.wsize || _out !== strm.avail_out && state.mode < BAD && (state.mode < CHECK || flush2 !== Z_FINISH)) { - if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) { - state.mode = MEM; - return Z_MEM_ERROR; - } - } - _in -= strm.avail_in; - _out -= strm.avail_out; - strm.total_in += _in; - strm.total_out += _out; - state.total += _out; - if (state.wrap && _out) { - strm.adler = state.check = /*UPDATE(state.check, strm.next_out - _out, _out);*/ - state.flags ? crc322(state.check, output, _out, strm.next_out - _out) : adler32(state.check, output, _out, strm.next_out - _out); - } - strm.data_type = state.bits + (state.last ? 64 : 0) + (state.mode === TYPE ? 128 : 0) + (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0); - if ((_in === 0 && _out === 0 || flush2 === Z_FINISH) && ret === Z_OK) { - ret = Z_BUF_ERROR; - } - return ret; - } - function inflateEnd(strm) { - if (!strm || !strm.state) { - return Z_STREAM_ERROR; - } - var state = strm.state; - if (state.window) { - state.window = null; - } - strm.state = null; - return Z_OK; - } - function inflateGetHeader(strm, head) { - var state; - if (!strm || !strm.state) { - return Z_STREAM_ERROR; - } - state = strm.state; - if ((state.wrap & 2) === 0) { - return Z_STREAM_ERROR; - } - state.head = head; - head.done = false; - return Z_OK; - } - function inflateSetDictionary(strm, dictionary) { - var dictLength = dictionary.length; - var state; - var dictid; - var ret; - if (!strm || !strm.state) { - return Z_STREAM_ERROR; - } - state = strm.state; - if (state.wrap !== 0 && state.mode !== DICT) { - return Z_STREAM_ERROR; - } - if (state.mode === DICT) { - dictid = 1; - dictid = adler32(dictid, dictionary, dictLength, 0); - if (dictid !== state.check) { - return Z_DATA_ERROR; - } - } - ret = updatewindow(strm, dictionary, dictLength, dictLength); - if (ret) { - state.mode = MEM; - return Z_MEM_ERROR; - } - state.havedict = 1; - return Z_OK; - } - exports2.inflateReset = inflateReset; - exports2.inflateReset2 = inflateReset2; - exports2.inflateResetKeep = inflateResetKeep; - exports2.inflateInit = inflateInit; - exports2.inflateInit2 = inflateInit2; - exports2.inflate = inflate2; - exports2.inflateEnd = inflateEnd; - exports2.inflateGetHeader = inflateGetHeader; - exports2.inflateSetDictionary = inflateSetDictionary; - exports2.inflateInfo = "pako inflate (from Nodeca project)"; - } -}); - -// node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/constants.js -var require_constants = __commonJS({ - "node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/constants.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - module2.exports = { - /* Allowed flush values; see deflate() and inflate() below for details */ - Z_NO_FLUSH: 0, - Z_PARTIAL_FLUSH: 1, - Z_SYNC_FLUSH: 2, - Z_FULL_FLUSH: 3, - Z_FINISH: 4, - Z_BLOCK: 5, - Z_TREES: 6, - /* Return codes for the compression/decompression functions. Negative values - * are errors, positive values are used for special but normal events. - */ - Z_OK: 0, - Z_STREAM_END: 1, - Z_NEED_DICT: 2, - Z_ERRNO: -1, - Z_STREAM_ERROR: -2, - Z_DATA_ERROR: -3, - //Z_MEM_ERROR: -4, - Z_BUF_ERROR: -5, - //Z_VERSION_ERROR: -6, - /* compression levels */ - Z_NO_COMPRESSION: 0, - Z_BEST_SPEED: 1, - Z_BEST_COMPRESSION: 9, - Z_DEFAULT_COMPRESSION: -1, - Z_FILTERED: 1, - Z_HUFFMAN_ONLY: 2, - Z_RLE: 3, - Z_FIXED: 4, - Z_DEFAULT_STRATEGY: 0, - /* Possible values of the data_type field (though see inflate()) */ - Z_BINARY: 0, - Z_TEXT: 1, - //Z_ASCII: 1, // = Z_TEXT (deprecated) - Z_UNKNOWN: 2, - /* The deflate compression method */ - Z_DEFLATED: 8 - //Z_NULL: null // Use -1 or null inline, depending on var type - }; - } -}); - -// node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/gzheader.js -var require_gzheader = __commonJS({ - "node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/gzheader.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - function GZheader() { - this.text = 0; - this.time = 0; - this.xflags = 0; - this.os = 0; - this.extra = null; - this.extra_len = 0; - this.name = ""; - this.comment = ""; - this.hcrc = 0; - this.done = false; - } - module2.exports = GZheader; - } -}); - -// node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/inflate.js -var require_inflate2 = __commonJS({ - "node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/inflate.js"(exports2) { - "use strict"; - init_polyfill_buffer(); - var zlib_inflate = require_inflate(); - var utils = require_common(); - var strings = require_strings(); - var c = require_constants(); - var msg = require_messages(); - var ZStream = require_zstream(); - var GZheader = require_gzheader(); - var toString = Object.prototype.toString; - function Inflate(options) { - if (!(this instanceof Inflate)) - return new Inflate(options); - this.options = utils.assign({ - chunkSize: 16384, - windowBits: 0, - to: "" - }, options || {}); - var opt = this.options; - if (opt.raw && opt.windowBits >= 0 && opt.windowBits < 16) { - opt.windowBits = -opt.windowBits; - if (opt.windowBits === 0) { - opt.windowBits = -15; - } - } - if (opt.windowBits >= 0 && opt.windowBits < 16 && !(options && options.windowBits)) { - opt.windowBits += 32; - } - if (opt.windowBits > 15 && opt.windowBits < 48) { - if ((opt.windowBits & 15) === 0) { - opt.windowBits |= 15; - } - } - this.err = 0; - this.msg = ""; - this.ended = false; - this.chunks = []; - this.strm = new ZStream(); - this.strm.avail_out = 0; - var status2 = zlib_inflate.inflateInit2( - this.strm, - opt.windowBits - ); - if (status2 !== c.Z_OK) { - throw new Error(msg[status2]); - } - this.header = new GZheader(); - zlib_inflate.inflateGetHeader(this.strm, this.header); - if (opt.dictionary) { - if (typeof opt.dictionary === "string") { - opt.dictionary = strings.string2buf(opt.dictionary); - } else if (toString.call(opt.dictionary) === "[object ArrayBuffer]") { - opt.dictionary = new Uint8Array(opt.dictionary); - } - if (opt.raw) { - status2 = zlib_inflate.inflateSetDictionary(this.strm, opt.dictionary); - if (status2 !== c.Z_OK) { - throw new Error(msg[status2]); - } - } - } - } - Inflate.prototype.push = function(data, mode) { - var strm = this.strm; - var chunkSize = this.options.chunkSize; - var dictionary = this.options.dictionary; - var status2, _mode; - var next_out_utf8, tail, utf8str; - var allowBufError = false; - if (this.ended) { - return false; - } - _mode = mode === ~~mode ? mode : mode === true ? c.Z_FINISH : c.Z_NO_FLUSH; - if (typeof data === "string") { - strm.input = strings.binstring2buf(data); - } else if (toString.call(data) === "[object ArrayBuffer]") { - strm.input = new Uint8Array(data); - } else { - strm.input = data; - } - strm.next_in = 0; - strm.avail_in = strm.input.length; - do { - if (strm.avail_out === 0) { - strm.output = new utils.Buf8(chunkSize); - strm.next_out = 0; - strm.avail_out = chunkSize; - } - status2 = zlib_inflate.inflate(strm, c.Z_NO_FLUSH); - if (status2 === c.Z_NEED_DICT && dictionary) { - status2 = zlib_inflate.inflateSetDictionary(this.strm, dictionary); - } - if (status2 === c.Z_BUF_ERROR && allowBufError === true) { - status2 = c.Z_OK; - allowBufError = false; - } - if (status2 !== c.Z_STREAM_END && status2 !== c.Z_OK) { - this.onEnd(status2); - this.ended = true; - return false; - } - if (strm.next_out) { - if (strm.avail_out === 0 || status2 === c.Z_STREAM_END || strm.avail_in === 0 && (_mode === c.Z_FINISH || _mode === c.Z_SYNC_FLUSH)) { - if (this.options.to === "string") { - next_out_utf8 = strings.utf8border(strm.output, strm.next_out); - tail = strm.next_out - next_out_utf8; - utf8str = strings.buf2string(strm.output, next_out_utf8); - strm.next_out = tail; - strm.avail_out = chunkSize - tail; - if (tail) { - utils.arraySet(strm.output, strm.output, next_out_utf8, tail, 0); - } - this.onData(utf8str); - } else { - this.onData(utils.shrinkBuf(strm.output, strm.next_out)); - } - } - } - if (strm.avail_in === 0 && strm.avail_out === 0) { - allowBufError = true; - } - } while ((strm.avail_in > 0 || strm.avail_out === 0) && status2 !== c.Z_STREAM_END); - if (status2 === c.Z_STREAM_END) { - _mode = c.Z_FINISH; - } - if (_mode === c.Z_FINISH) { - status2 = zlib_inflate.inflateEnd(this.strm); - this.onEnd(status2); - this.ended = true; - return status2 === c.Z_OK; - } - if (_mode === c.Z_SYNC_FLUSH) { - this.onEnd(c.Z_OK); - strm.avail_out = 0; - return true; - } - return true; - }; - Inflate.prototype.onData = function(chunk) { - this.chunks.push(chunk); - }; - Inflate.prototype.onEnd = function(status2) { - if (status2 === c.Z_OK) { - if (this.options.to === "string") { - this.result = this.chunks.join(""); - } else { - this.result = utils.flattenChunks(this.chunks); - } - } - this.chunks = []; - this.err = status2; - this.msg = this.strm.msg; - }; - function inflate2(input, options) { - var inflator = new Inflate(options); - inflator.push(input, true); - if (inflator.err) { - throw inflator.msg || msg[inflator.err]; - } - return inflator.result; - } - function inflateRaw(input, options) { - options = options || {}; - options.raw = true; - return inflate2(input, options); - } - exports2.Inflate = Inflate; - exports2.inflate = inflate2; - exports2.inflateRaw = inflateRaw; - exports2.ungzip = inflate2; - } -}); - -// node_modules/.pnpm/pako@1.0.11/node_modules/pako/index.js -var require_pako = __commonJS({ - "node_modules/.pnpm/pako@1.0.11/node_modules/pako/index.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - var assign2 = require_common().assign; - var deflate2 = require_deflate2(); - var inflate2 = require_inflate2(); - var constants = require_constants(); - var pako2 = {}; - assign2(pako2, deflate2, inflate2, constants); - module2.exports = pako2; - } -}); - -// node_modules/.pnpm/pify@4.0.1/node_modules/pify/index.js -var require_pify = __commonJS({ - "node_modules/.pnpm/pify@4.0.1/node_modules/pify/index.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - var processFn = (fn, options) => function(...args) { - const P = options.promiseModule; - return new P((resolve, reject) => { - if (options.multiArgs) { - args.push((...result) => { - if (options.errorFirst) { - if (result[0]) { - reject(result); - } else { - result.shift(); - resolve(result); - } - } else { - resolve(result); - } - }); - } else if (options.errorFirst) { - args.push((error, result) => { - if (error) { - reject(error); - } else { - resolve(result); - } - }); - } else { - args.push(resolve); - } - fn.apply(this, args); - }); - }; - module2.exports = (input, options) => { - options = Object.assign({ - exclude: [/.+(Sync|Stream)$/], - errorFirst: true, - promiseModule: Promise - }, options); - const objType = typeof input; - if (!(input !== null && (objType === "object" || objType === "function"))) { - throw new TypeError(`Expected \`input\` to be a \`Function\` or \`Object\`, got \`${input === null ? "null" : objType}\``); - } - const filter = (key2) => { - const match = (pattern) => typeof pattern === "string" ? key2 === pattern : pattern.test(key2); - return options.include ? options.include.some(match) : !options.exclude.some(match); - }; - let ret; - if (objType === "function") { - ret = function(...args) { - return options.excludeMain ? input(...args) : processFn(input, options).apply(this, args); - }; - } else { - ret = Object.create(Object.getPrototypeOf(input)); - } - for (const key2 in input) { - const property = input[key2]; - ret[key2] = typeof property === "function" && filter(key2) ? processFn(property, options) : property; - } - return ret; - }; - } -}); - -// node_modules/.pnpm/ignore@5.3.1/node_modules/ignore/index.js -var require_ignore = __commonJS({ - "node_modules/.pnpm/ignore@5.3.1/node_modules/ignore/index.js"(exports2, module2) { - init_polyfill_buffer(); - function makeArray(subject) { - return Array.isArray(subject) ? subject : [subject]; - } - var EMPTY = ""; - var SPACE = " "; - var ESCAPE = "\\"; - var REGEX_TEST_BLANK_LINE = /^\s+$/; - var REGEX_INVALID_TRAILING_BACKSLASH = /(?:[^\\]|^)\\$/; - var REGEX_REPLACE_LEADING_EXCAPED_EXCLAMATION = /^\\!/; - var REGEX_REPLACE_LEADING_EXCAPED_HASH = /^\\#/; - var REGEX_SPLITALL_CRLF = /\r?\n/g; - var REGEX_TEST_INVALID_PATH = /^\.*\/|^\.+$/; - var SLASH = "/"; - var TMP_KEY_IGNORE = "node-ignore"; - if (typeof Symbol !== "undefined") { - TMP_KEY_IGNORE = Symbol.for("node-ignore"); - } - var KEY_IGNORE = TMP_KEY_IGNORE; - var define2 = (object, key2, value) => Object.defineProperty(object, key2, { value }); - var REGEX_REGEXP_RANGE = /([0-z])-([0-z])/g; - var RETURN_FALSE = () => false; - var sanitizeRange = (range) => range.replace( - REGEX_REGEXP_RANGE, - (match, from, to) => from.charCodeAt(0) <= to.charCodeAt(0) ? match : EMPTY - ); - var cleanRangeBackSlash = (slashes) => { - const { length } = slashes; - return slashes.slice(0, length - length % 2); - }; - var REPLACERS = [ - [ - // remove BOM - // TODO: - // Other similar zero-width characters? - /^\uFEFF/, - () => EMPTY - ], - // > Trailing spaces are ignored unless they are quoted with backslash ("\") - [ - // (a\ ) -> (a ) - // (a ) -> (a) - // (a \ ) -> (a ) - /\\?\s+$/, - (match) => match.indexOf("\\") === 0 ? SPACE : EMPTY - ], - // replace (\ ) with ' ' - [ - /\\\s/g, - () => SPACE - ], - // Escape metacharacters - // which is written down by users but means special for regular expressions. - // > There are 12 characters with special meanings: - // > - the backslash \, - // > - the caret ^, - // > - the dollar sign $, - // > - the period or dot ., - // > - the vertical bar or pipe symbol |, - // > - the question mark ?, - // > - the asterisk or star *, - // > - the plus sign +, - // > - the opening parenthesis (, - // > - the closing parenthesis ), - // > - and the opening square bracket [, - // > - the opening curly brace {, - // > These special characters are often called "metacharacters". - [ - /[\\$.|*+(){^]/g, - (match) => `\\${match}` - ], - [ - // > a question mark (?) matches a single character - /(?!\\)\?/g, - () => "[^/]" - ], - // leading slash - [ - // > A leading slash matches the beginning of the pathname. - // > For example, "/*.c" matches "cat-file.c" but not "mozilla-sha1/sha1.c". - // A leading slash matches the beginning of the pathname - /^\//, - () => "^" - ], - // replace special metacharacter slash after the leading slash - [ - /\//g, - () => "\\/" - ], - [ - // > A leading "**" followed by a slash means match in all directories. - // > For example, "**/foo" matches file or directory "foo" anywhere, - // > the same as pattern "foo". - // > "**/foo/bar" matches file or directory "bar" anywhere that is directly - // > under directory "foo". - // Notice that the '*'s have been replaced as '\\*' - /^\^*\\\*\\\*\\\//, - // '**/foo' <-> 'foo' - () => "^(?:.*\\/)?" - ], - // starting - [ - // there will be no leading '/' - // (which has been replaced by section "leading slash") - // If starts with '**', adding a '^' to the regular expression also works - /^(?=[^^])/, - function startingReplacer() { - return !/\/(?!$)/.test(this) ? "(?:^|\\/)" : "^"; - } - ], - // two globstars - [ - // Use lookahead assertions so that we could match more than one `'/**'` - /\\\/\\\*\\\*(?=\\\/|$)/g, - // Zero, one or several directories - // should not use '*', or it will be replaced by the next replacer - // Check if it is not the last `'/**'` - (_, index2, str) => index2 + 6 < str.length ? "(?:\\/[^\\/]+)*" : "\\/.+" - ], - // normal intermediate wildcards - [ - // Never replace escaped '*' - // ignore rule '\*' will match the path '*' - // 'abc.*/' -> go - // 'abc.*' -> skip this rule, - // coz trailing single wildcard will be handed by [trailing wildcard] - /(^|[^\\]+)(\\\*)+(?=.+)/g, - // '*.js' matches '.js' - // '*.js' doesn't match 'abc' - (_, p1, p2) => { - const unescaped = p2.replace(/\\\*/g, "[^\\/]*"); - return p1 + unescaped; - } - ], - [ - // unescape, revert step 3 except for back slash - // For example, if a user escape a '\\*', - // after step 3, the result will be '\\\\\\*' - /\\\\\\(?=[$.|*+(){^])/g, - () => ESCAPE - ], - [ - // '\\\\' -> '\\' - /\\\\/g, - () => ESCAPE - ], - [ - // > The range notation, e.g. [a-zA-Z], - // > can be used to match one of the characters in a range. - // `\` is escaped by step 3 - /(\\)?\[([^\]/]*?)(\\*)($|\])/g, - (match, leadEscape, range, endEscape, close) => leadEscape === ESCAPE ? `\\[${range}${cleanRangeBackSlash(endEscape)}${close}` : close === "]" ? endEscape.length % 2 === 0 ? `[${sanitizeRange(range)}${endEscape}]` : "[]" : "[]" - ], - // ending - [ - // 'js' will not match 'js.' - // 'ab' will not match 'abc' - /(?:[^*])$/, - // WTF! - // https://git-scm.com/docs/gitignore - // changes in [2.22.1](https://git-scm.com/docs/gitignore/2.22.1) - // which re-fixes #24, #38 - // > If there is a separator at the end of the pattern then the pattern - // > will only match directories, otherwise the pattern can match both - // > files and directories. - // 'js*' will not match 'a.js' - // 'js/' will not match 'a.js' - // 'js' will match 'a.js' and 'a.js/' - (match) => /\/$/.test(match) ? `${match}$` : `${match}(?=$|\\/$)` - ], - // trailing wildcard - [ - /(\^|\\\/)?\\\*$/, - (_, p1) => { - const prefix = p1 ? `${p1}[^/]+` : "[^/]*"; - return `${prefix}(?=$|\\/$)`; - } - ] - ]; - var regexCache = /* @__PURE__ */ Object.create(null); - var makeRegex = (pattern, ignoreCase) => { - let source = regexCache[pattern]; - if (!source) { - source = REPLACERS.reduce( - (prev, current) => prev.replace(current[0], current[1].bind(pattern)), - pattern - ); - regexCache[pattern] = source; - } - return ignoreCase ? new RegExp(source, "i") : new RegExp(source); - }; - var isString = (subject) => typeof subject === "string"; - var checkPattern = (pattern) => pattern && isString(pattern) && !REGEX_TEST_BLANK_LINE.test(pattern) && !REGEX_INVALID_TRAILING_BACKSLASH.test(pattern) && pattern.indexOf("#") !== 0; - var splitPattern = (pattern) => pattern.split(REGEX_SPLITALL_CRLF); - var IgnoreRule = class { - constructor(origin, pattern, negative, regex2) { - this.origin = origin; - this.pattern = pattern; - this.negative = negative; - this.regex = regex2; - } - }; - var createRule = (pattern, ignoreCase) => { - const origin = pattern; - let negative = false; - if (pattern.indexOf("!") === 0) { - negative = true; - pattern = pattern.substr(1); - } - pattern = pattern.replace(REGEX_REPLACE_LEADING_EXCAPED_EXCLAMATION, "!").replace(REGEX_REPLACE_LEADING_EXCAPED_HASH, "#"); - const regex2 = makeRegex(pattern, ignoreCase); - return new IgnoreRule( - origin, - pattern, - negative, - regex2 - ); - }; - var throwError = (message, Ctor) => { - throw new Ctor(message); - }; - var checkPath = (path2, originalPath, doThrow) => { - if (!isString(path2)) { - return doThrow( - `path must be a string, but got \`${originalPath}\``, - TypeError - ); - } - if (!path2) { - return doThrow(`path must not be empty`, TypeError); - } - if (checkPath.isNotRelative(path2)) { - const r = "`path.relative()`d"; - return doThrow( - `path should be a ${r} string, but got "${originalPath}"`, - RangeError - ); - } - return true; - }; - var isNotRelative = (path2) => REGEX_TEST_INVALID_PATH.test(path2); - checkPath.isNotRelative = isNotRelative; - checkPath.convert = (p) => p; - var Ignore = class { - constructor({ - ignorecase = true, - ignoreCase = ignorecase, - allowRelativePaths = false - } = {}) { - define2(this, KEY_IGNORE, true); - this._rules = []; - this._ignoreCase = ignoreCase; - this._allowRelativePaths = allowRelativePaths; - this._initCache(); - } - _initCache() { - this._ignoreCache = /* @__PURE__ */ Object.create(null); - this._testCache = /* @__PURE__ */ Object.create(null); - } - _addPattern(pattern) { - if (pattern && pattern[KEY_IGNORE]) { - this._rules = this._rules.concat(pattern._rules); - this._added = true; - return; - } - if (checkPattern(pattern)) { - const rule = createRule(pattern, this._ignoreCase); - this._added = true; - this._rules.push(rule); - } - } - // @param {Array | string | Ignore} pattern - add(pattern) { - this._added = false; - makeArray( - isString(pattern) ? splitPattern(pattern) : pattern - ).forEach(this._addPattern, this); - if (this._added) { - this._initCache(); - } - return this; - } - // legacy - addPattern(pattern) { - return this.add(pattern); - } - // | ignored : unignored - // negative | 0:0 | 0:1 | 1:0 | 1:1 - // -------- | ------- | ------- | ------- | -------- - // 0 | TEST | TEST | SKIP | X - // 1 | TESTIF | SKIP | TEST | X - // - SKIP: always skip - // - TEST: always test - // - TESTIF: only test if checkUnignored - // - X: that never happen - // @param {boolean} whether should check if the path is unignored, - // setting `checkUnignored` to `false` could reduce additional - // path matching. - // @returns {TestResult} true if a file is ignored - _testOne(path2, checkUnignored) { - let ignored = false; - let unignored = false; - this._rules.forEach((rule) => { - const { negative } = rule; - if (unignored === negative && ignored !== unignored || negative && !ignored && !unignored && !checkUnignored) { - return; - } - const matched = rule.regex.test(path2); - if (matched) { - ignored = !negative; - unignored = negative; - } - }); - return { - ignored, - unignored - }; - } - // @returns {TestResult} - _test(originalPath, cache, checkUnignored, slices) { - const path2 = originalPath && checkPath.convert(originalPath); - checkPath( - path2, - originalPath, - this._allowRelativePaths ? RETURN_FALSE : throwError - ); - return this._t(path2, cache, checkUnignored, slices); - } - _t(path2, cache, checkUnignored, slices) { - if (path2 in cache) { - return cache[path2]; - } - if (!slices) { - slices = path2.split(SLASH); - } - slices.pop(); - if (!slices.length) { - return cache[path2] = this._testOne(path2, checkUnignored); - } - const parent = this._t( - slices.join(SLASH) + SLASH, - cache, - checkUnignored, - slices - ); - return cache[path2] = parent.ignored ? parent : this._testOne(path2, checkUnignored); - } - ignores(path2) { - return this._test(path2, this._ignoreCache, false).ignored; - } - createFilter() { - return (path2) => !this.ignores(path2); - } - filter(paths) { - return makeArray(paths).filter(this.createFilter()); - } - // @returns {TestResult} - test(path2) { - return this._test(path2, this._testCache, true); - } - }; - var factory = (options) => new Ignore(options); - var isPathValid = (path2) => checkPath(path2 && checkPath.convert(path2), path2, RETURN_FALSE); - factory.isPathValid = isPathValid; - factory.default = factory; - module2.exports = factory; - if ( - // Detect `process` so that it can run in browsers. - typeof process !== "undefined" && (process.env && process.env.IGNORE_TEST_WIN32 || process.platform === "win32") - ) { - const makePosix = (str) => /^\\\\\?\\/.test(str) || /["<>|\u0000-\u001F]+/u.test(str) ? str : str.replace(/\\/g, "/"); - checkPath.convert = makePosix; - const REGIX_IS_WINDOWS_PATH_ABSOLUTE = /^[a-z]:\//i; - checkPath.isNotRelative = (path2) => REGIX_IS_WINDOWS_PATH_ABSOLUTE.test(path2) || isNotRelative(path2); - } - } -}); - -// node_modules/.pnpm/clean-git-ref@2.0.1/node_modules/clean-git-ref/lib/index.js -var require_lib2 = __commonJS({ - "node_modules/.pnpm/clean-git-ref@2.0.1/node_modules/clean-git-ref/lib/index.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - function escapeRegExp(string) { - return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); - } - function replaceAll(str, search, replacement) { - search = search instanceof RegExp ? search : new RegExp(escapeRegExp(search), "g"); - return str.replace(search, replacement); - } - var CleanGitRef = { - clean: function clean(value) { - if (typeof value !== "string") { - throw new Error("Expected a string, received: " + value); - } - value = replaceAll(value, "./", "/"); - value = replaceAll(value, "..", "."); - value = replaceAll(value, " ", "-"); - value = replaceAll(value, /^[~^:?*\\\-]/g, ""); - value = replaceAll(value, /[~^:?*\\]/g, "-"); - value = replaceAll(value, /[~^:?*\\\-]$/g, ""); - value = replaceAll(value, "@{", "-"); - value = replaceAll(value, /\.$/g, ""); - value = replaceAll(value, /\/$/g, ""); - value = replaceAll(value, /\.lock$/g, ""); - return value; - } - }; - module2.exports = CleanGitRef; - } -}); - -// node_modules/.pnpm/diff3@0.0.3/node_modules/diff3/onp.js -var require_onp = __commonJS({ - "node_modules/.pnpm/diff3@0.0.3/node_modules/diff3/onp.js"(exports2, module2) { - init_polyfill_buffer(); - module2.exports = function(a_, b_) { - var a = a_, b = b_, m = a.length, n = b.length, reverse = false, ed = null, offset = m + 1, path2 = [], pathposi = [], ses = [], lcs = "", SES_DELETE = -1, SES_COMMON = 0, SES_ADD = 1; - var tmp1, tmp2; - var init3 = function() { - if (m >= n) { - tmp1 = a; - tmp2 = m; - a = b; - b = tmp1; - m = n; - n = tmp2; - reverse = true; - offset = m + 1; - } - }; - var P = function(x, y, k) { - return { - "x": x, - "y": y, - "k": k - }; - }; - var seselem = function(elem, t) { - return { - "elem": elem, - "t": t - }; - }; - var snake = function(k, p, pp) { - var r, x, y; - if (p > pp) { - r = path2[k - 1 + offset]; - } else { - r = path2[k + 1 + offset]; - } - y = Math.max(p, pp); - x = y - k; - while (x < m && y < n && a[x] === b[y]) { - ++x; - ++y; - } - path2[k + offset] = pathposi.length; - pathposi[pathposi.length] = new P(x, y, r); - return y; - }; - var recordseq = function(epc) { - var x_idx, y_idx, px_idx, py_idx, i; - x_idx = y_idx = 1; - px_idx = py_idx = 0; - for (i = epc.length - 1; i >= 0; --i) { - while (px_idx < epc[i].x || py_idx < epc[i].y) { - if (epc[i].y - epc[i].x > py_idx - px_idx) { - if (reverse) { - ses[ses.length] = new seselem(b[py_idx], SES_DELETE); - } else { - ses[ses.length] = new seselem(b[py_idx], SES_ADD); - } - ++y_idx; - ++py_idx; - } else if (epc[i].y - epc[i].x < py_idx - px_idx) { - if (reverse) { - ses[ses.length] = new seselem(a[px_idx], SES_ADD); - } else { - ses[ses.length] = new seselem(a[px_idx], SES_DELETE); - } - ++x_idx; - ++px_idx; - } else { - ses[ses.length] = new seselem(a[px_idx], SES_COMMON); - lcs += a[px_idx]; - ++x_idx; - ++y_idx; - ++px_idx; - ++py_idx; - } - } - } - }; - init3(); - return { - SES_DELETE: -1, - SES_COMMON: 0, - SES_ADD: 1, - editdistance: function() { - return ed; - }, - getlcs: function() { - return lcs; - }, - getses: function() { - return ses; - }, - compose: function() { - var delta, size, fp, p, r, epc, i, k; - delta = n - m; - size = m + n + 3; - fp = {}; - for (i = 0; i < size; ++i) { - fp[i] = -1; - path2[i] = -1; - } - p = -1; - do { - ++p; - for (k = -p; k <= delta - 1; ++k) { - fp[k + offset] = snake(k, fp[k - 1 + offset] + 1, fp[k + 1 + offset]); - } - for (k = delta + p; k >= delta + 1; --k) { - fp[k + offset] = snake(k, fp[k - 1 + offset] + 1, fp[k + 1 + offset]); - } - fp[delta + offset] = snake(delta, fp[delta - 1 + offset] + 1, fp[delta + 1 + offset]); - } while (fp[delta + offset] !== n); - ed = delta + 2 * p; - r = path2[delta + offset]; - epc = []; - while (r !== -1) { - epc[epc.length] = new P(pathposi[r].x, pathposi[r].y, null); - r = pathposi[r].k; - } - recordseq(epc); - } - }; - }; - } -}); - -// node_modules/.pnpm/diff3@0.0.3/node_modules/diff3/diff3.js -var require_diff3 = __commonJS({ - "node_modules/.pnpm/diff3@0.0.3/node_modules/diff3/diff3.js"(exports2, module2) { - init_polyfill_buffer(); - var onp = require_onp(); - function longestCommonSubsequence(file1, file2) { - var diff3 = new onp(file1, file2); - diff3.compose(); - var ses = diff3.getses(); - var root2; - var prev; - var file1RevIdx = file1.length - 1, file2RevIdx = file2.length - 1; - for (var i = ses.length - 1; i >= 0; --i) { - if (ses[i].t === diff3.SES_COMMON) { - if (prev) { - prev.chain = { - file1index: file1RevIdx, - file2index: file2RevIdx, - chain: null - }; - prev = prev.chain; - } else { - root2 = { - file1index: file1RevIdx, - file2index: file2RevIdx, - chain: null - }; - prev = root2; - } - file1RevIdx--; - file2RevIdx--; - } else if (ses[i].t === diff3.SES_DELETE) { - file1RevIdx--; - } else if (ses[i].t === diff3.SES_ADD) { - file2RevIdx--; - } - } - var tail = { - file1index: -1, - file2index: -1, - chain: null - }; - if (!prev) { - return tail; - } - prev.chain = tail; - return root2; - } - function diffIndices(file1, file2) { - var result = []; - var tail1 = file1.length; - var tail2 = file2.length; - for (var candidate = longestCommonSubsequence(file1, file2); candidate !== null; candidate = candidate.chain) { - var mismatchLength1 = tail1 - candidate.file1index - 1; - var mismatchLength2 = tail2 - candidate.file2index - 1; - tail1 = candidate.file1index; - tail2 = candidate.file2index; - if (mismatchLength1 || mismatchLength2) { - result.push({ - file1: [tail1 + 1, mismatchLength1], - file2: [tail2 + 1, mismatchLength2] - }); - } - } - result.reverse(); - return result; - } - function diff3MergeIndices(a, o, b) { - var i; - var m1 = diffIndices(o, a); - var m2 = diffIndices(o, b); - var hunks = []; - function addHunk(h, side2) { - hunks.push([h.file1[0], side2, h.file1[1], h.file2[0], h.file2[1]]); - } - for (i = 0; i < m1.length; i++) { - addHunk(m1[i], 0); - } - for (i = 0; i < m2.length; i++) { - addHunk(m2[i], 2); - } - hunks.sort(function(x, y) { - return x[0] - y[0]; - }); - var result = []; - var commonOffset = 0; - function copyCommon(targetOffset) { - if (targetOffset > commonOffset) { - result.push([1, commonOffset, targetOffset - commonOffset]); - commonOffset = targetOffset; - } - } - for (var hunkIndex = 0; hunkIndex < hunks.length; hunkIndex++) { - var firstHunkIndex = hunkIndex; - var hunk = hunks[hunkIndex]; - var regionLhs = hunk[0]; - var regionRhs = regionLhs + hunk[2]; - while (hunkIndex < hunks.length - 1) { - var maybeOverlapping = hunks[hunkIndex + 1]; - var maybeLhs = maybeOverlapping[0]; - if (maybeLhs > regionRhs) - break; - regionRhs = Math.max(regionRhs, maybeLhs + maybeOverlapping[2]); - hunkIndex++; - } - copyCommon(regionLhs); - if (firstHunkIndex == hunkIndex) { - if (hunk[4] > 0) { - result.push([hunk[1], hunk[3], hunk[4]]); - } - } else { - var regions = { - 0: [a.length, -1, o.length, -1], - 2: [b.length, -1, o.length, -1] - }; - for (i = firstHunkIndex; i <= hunkIndex; i++) { - hunk = hunks[i]; - var side = hunk[1]; - var r = regions[side]; - var oLhs = hunk[0]; - var oRhs = oLhs + hunk[2]; - var abLhs = hunk[3]; - var abRhs = abLhs + hunk[4]; - r[0] = Math.min(abLhs, r[0]); - r[1] = Math.max(abRhs, r[1]); - r[2] = Math.min(oLhs, r[2]); - r[3] = Math.max(oRhs, r[3]); - } - var aLhs = regions[0][0] + (regionLhs - regions[0][2]); - var aRhs = regions[0][1] + (regionRhs - regions[0][3]); - var bLhs = regions[2][0] + (regionLhs - regions[2][2]); - var bRhs = regions[2][1] + (regionRhs - regions[2][3]); - result.push([ - -1, - aLhs, - aRhs - aLhs, - regionLhs, - regionRhs - regionLhs, - bLhs, - bRhs - bLhs - ]); - } - commonOffset = regionRhs; - } - copyCommon(o.length); - return result; - } - function diff3Merge2(a, o, b) { - var result = []; - var files = [a, o, b]; - var indices = diff3MergeIndices(a, o, b); - var okLines = []; - function flushOk() { - if (okLines.length) { - result.push({ - ok: okLines - }); - } - okLines = []; - } - function pushOk(xs) { - for (var j = 0; j < xs.length; j++) { - okLines.push(xs[j]); - } - } - function isTrueConflict(rec) { - if (rec[2] != rec[6]) - return true; - var aoff = rec[1]; - var boff = rec[5]; - for (var j = 0; j < rec[2]; j++) { - if (a[j + aoff] != b[j + boff]) - return true; - } - return false; - } - for (var i = 0; i < indices.length; i++) { - var x = indices[i]; - var side = x[0]; - if (side == -1) { - if (!isTrueConflict(x)) { - pushOk(files[0].slice(x[1], x[1] + x[2])); - } else { - flushOk(); - result.push({ - conflict: { - a: a.slice(x[1], x[1] + x[2]), - aIndex: x[1], - o: o.slice(x[3], x[3] + x[4]), - oIndex: x[3], - b: b.slice(x[5], x[5] + x[6]), - bIndex: x[5] - } - }); - } - } else { - pushOk(files[side].slice(x[1], x[1] + x[2])); - } - } - flushOk(); - return result; - } - module2.exports = diff3Merge2; - } -}); - -// node_modules/.pnpm/ms@2.1.2/node_modules/ms/index.js -var require_ms = __commonJS({ - "node_modules/.pnpm/ms@2.1.2/node_modules/ms/index.js"(exports2, module2) { - init_polyfill_buffer(); - var s = 1e3; - var m = s * 60; - var h = m * 60; - var d = h * 24; - var w = d * 7; - var y = d * 365.25; - module2.exports = function(val, options) { - options = options || {}; - var type = typeof val; - if (type === "string" && val.length > 0) { - return parse2(val); - } else if (type === "number" && isFinite(val)) { - return options.long ? fmtLong(val) : fmtShort(val); - } - throw new Error( - "val is not a non-empty string or a valid number. val=" + JSON.stringify(val) - ); - }; - function parse2(str) { - str = String(str); - if (str.length > 100) { - return; - } - var match = /^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec( - str - ); - if (!match) { - return; - } - var n = parseFloat(match[1]); - var type = (match[2] || "ms").toLowerCase(); - switch (type) { - case "years": - case "year": - case "yrs": - case "yr": - case "y": - return n * y; - case "weeks": - case "week": - case "w": - return n * w; - case "days": - case "day": - case "d": - return n * d; - case "hours": - case "hour": - case "hrs": - case "hr": - case "h": - return n * h; - case "minutes": - case "minute": - case "mins": - case "min": - case "m": - return n * m; - case "seconds": - case "second": - case "secs": - case "sec": - case "s": - return n * s; - case "milliseconds": - case "millisecond": - case "msecs": - case "msec": - case "ms": - return n; - default: - return void 0; - } - } - function fmtShort(ms) { - var msAbs = Math.abs(ms); - if (msAbs >= d) { - return Math.round(ms / d) + "d"; - } - if (msAbs >= h) { - return Math.round(ms / h) + "h"; - } - if (msAbs >= m) { - return Math.round(ms / m) + "m"; - } - if (msAbs >= s) { - return Math.round(ms / s) + "s"; - } - return ms + "ms"; - } - function fmtLong(ms) { - var msAbs = Math.abs(ms); - if (msAbs >= d) { - return plural(ms, msAbs, d, "day"); - } - if (msAbs >= h) { - return plural(ms, msAbs, h, "hour"); - } - if (msAbs >= m) { - return plural(ms, msAbs, m, "minute"); - } - if (msAbs >= s) { - return plural(ms, msAbs, s, "second"); - } - return ms + " ms"; - } - function plural(ms, msAbs, n, name) { - var isPlural = msAbs >= n * 1.5; - return Math.round(ms / n) + " " + name + (isPlural ? "s" : ""); - } - } -}); - -// node_modules/.pnpm/debug@4.3.4_supports-color@9.4.0/node_modules/debug/src/common.js -var require_common2 = __commonJS({ - "node_modules/.pnpm/debug@4.3.4_supports-color@9.4.0/node_modules/debug/src/common.js"(exports2, module2) { - init_polyfill_buffer(); - function setup(env) { - createDebug.debug = createDebug; - createDebug.default = createDebug; - createDebug.coerce = coerce; - createDebug.disable = disable; - createDebug.enable = enable; - createDebug.enabled = enabled; - createDebug.humanize = require_ms(); - createDebug.destroy = destroy; - Object.keys(env).forEach((key2) => { - createDebug[key2] = env[key2]; - }); - createDebug.names = []; - createDebug.skips = []; - createDebug.formatters = {}; - function selectColor(namespace) { - let hash2 = 0; - for (let i = 0; i < namespace.length; i++) { - hash2 = (hash2 << 5) - hash2 + namespace.charCodeAt(i); - hash2 |= 0; - } - return createDebug.colors[Math.abs(hash2) % createDebug.colors.length]; - } - createDebug.selectColor = selectColor; - function createDebug(namespace) { - let prevTime; - let enableOverride = null; - let namespacesCache; - let enabledCache; - function debug3(...args) { - if (!debug3.enabled) { - return; - } - const self2 = debug3; - const curr = Number(/* @__PURE__ */ new Date()); - const ms = curr - (prevTime || curr); - self2.diff = ms; - self2.prev = prevTime; - self2.curr = curr; - prevTime = curr; - args[0] = createDebug.coerce(args[0]); - if (typeof args[0] !== "string") { - args.unshift("%O"); - } - let index2 = 0; - args[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => { - if (match === "%%") { - return "%"; - } - index2++; - const formatter = createDebug.formatters[format]; - if (typeof formatter === "function") { - const val = args[index2]; - match = formatter.call(self2, val); - args.splice(index2, 1); - index2--; - } - return match; - }); - createDebug.formatArgs.call(self2, args); - const logFn = self2.log || createDebug.log; - logFn.apply(self2, args); - } - debug3.namespace = namespace; - debug3.useColors = createDebug.useColors(); - debug3.color = createDebug.selectColor(namespace); - debug3.extend = extend; - debug3.destroy = createDebug.destroy; - Object.defineProperty(debug3, "enabled", { - enumerable: true, - configurable: false, - get: () => { - if (enableOverride !== null) { - return enableOverride; - } - if (namespacesCache !== createDebug.namespaces) { - namespacesCache = createDebug.namespaces; - enabledCache = createDebug.enabled(namespace); - } - return enabledCache; - }, - set: (v) => { - enableOverride = v; - } - }); - if (typeof createDebug.init === "function") { - createDebug.init(debug3); - } - return debug3; - } - function extend(namespace, delimiter) { - const newDebug = createDebug(this.namespace + (typeof delimiter === "undefined" ? ":" : delimiter) + namespace); - newDebug.log = this.log; - return newDebug; - } - function enable(namespaces) { - createDebug.save(namespaces); - createDebug.namespaces = namespaces; - createDebug.names = []; - createDebug.skips = []; - let i; - const split = (typeof namespaces === "string" ? namespaces : "").split(/[\s,]+/); - const len = split.length; - for (i = 0; i < len; i++) { - if (!split[i]) { - continue; - } - namespaces = split[i].replace(/\*/g, ".*?"); - if (namespaces[0] === "-") { - createDebug.skips.push(new RegExp("^" + namespaces.slice(1) + "$")); - } else { - createDebug.names.push(new RegExp("^" + namespaces + "$")); - } - } - } - function disable() { - const namespaces = [ - ...createDebug.names.map(toNamespace), - ...createDebug.skips.map(toNamespace).map((namespace) => "-" + namespace) - ].join(","); - createDebug.enable(""); - return namespaces; - } - function enabled(name) { - if (name[name.length - 1] === "*") { - return true; - } - let i; - let len; - for (i = 0, len = createDebug.skips.length; i < len; i++) { - if (createDebug.skips[i].test(name)) { - return false; - } - } - for (i = 0, len = createDebug.names.length; i < len; i++) { - if (createDebug.names[i].test(name)) { - return true; - } - } - return false; - } - function toNamespace(regexp) { - return regexp.toString().substring(2, regexp.toString().length - 2).replace(/\.\*\?$/, "*"); - } - function coerce(val) { - if (val instanceof Error) { - return val.stack || val.message; - } - return val; - } - function destroy() { - console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."); - } - createDebug.enable(createDebug.load()); - return createDebug; - } - module2.exports = setup; - } -}); - -// node_modules/.pnpm/debug@4.3.4_supports-color@9.4.0/node_modules/debug/src/browser.js -var require_browser = __commonJS({ - "node_modules/.pnpm/debug@4.3.4_supports-color@9.4.0/node_modules/debug/src/browser.js"(exports2, module2) { - init_polyfill_buffer(); - exports2.formatArgs = formatArgs; - exports2.save = save; - exports2.load = load; - exports2.useColors = useColors; - exports2.storage = localstorage(); - exports2.destroy = /* @__PURE__ */ (() => { - let warned = false; - return () => { - if (!warned) { - warned = true; - console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."); - } - }; - })(); - exports2.colors = [ - "#0000CC", - "#0000FF", - "#0033CC", - "#0033FF", - "#0066CC", - "#0066FF", - "#0099CC", - "#0099FF", - "#00CC00", - "#00CC33", - "#00CC66", - "#00CC99", - "#00CCCC", - "#00CCFF", - "#3300CC", - "#3300FF", - "#3333CC", - "#3333FF", - "#3366CC", - "#3366FF", - "#3399CC", - "#3399FF", - "#33CC00", - "#33CC33", - "#33CC66", - "#33CC99", - "#33CCCC", - "#33CCFF", - "#6600CC", - "#6600FF", - "#6633CC", - "#6633FF", - "#66CC00", - "#66CC33", - "#9900CC", - "#9900FF", - "#9933CC", - "#9933FF", - "#99CC00", - "#99CC33", - "#CC0000", - "#CC0033", - "#CC0066", - "#CC0099", - "#CC00CC", - "#CC00FF", - "#CC3300", - "#CC3333", - "#CC3366", - "#CC3399", - "#CC33CC", - "#CC33FF", - "#CC6600", - "#CC6633", - "#CC9900", - "#CC9933", - "#CCCC00", - "#CCCC33", - "#FF0000", - "#FF0033", - "#FF0066", - "#FF0099", - "#FF00CC", - "#FF00FF", - "#FF3300", - "#FF3333", - "#FF3366", - "#FF3399", - "#FF33CC", - "#FF33FF", - "#FF6600", - "#FF6633", - "#FF9900", - "#FF9933", - "#FFCC00", - "#FFCC33" - ]; - function useColors() { - if (typeof window !== "undefined" && window.process && (window.process.type === "renderer" || window.process.__nwjs)) { - return true; - } - if (typeof navigator !== "undefined" && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) { - return false; - } - return typeof document !== "undefined" && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance || // Is firebug? http://stackoverflow.com/a/398120/376773 - typeof window !== "undefined" && window.console && (window.console.firebug || window.console.exception && window.console.table) || // Is firefox >= v31? - // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages - typeof navigator !== "undefined" && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31 || // Double check webkit in userAgent just in case we are in a worker - typeof navigator !== "undefined" && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/); - } - function formatArgs(args) { - args[0] = (this.useColors ? "%c" : "") + this.namespace + (this.useColors ? " %c" : " ") + args[0] + (this.useColors ? "%c " : " ") + "+" + module2.exports.humanize(this.diff); - if (!this.useColors) { - return; - } - const c = "color: " + this.color; - args.splice(1, 0, c, "color: inherit"); - let index2 = 0; - let lastC = 0; - args[0].replace(/%[a-zA-Z%]/g, (match) => { - if (match === "%%") { - return; - } - index2++; - if (match === "%c") { - lastC = index2; - } - }); - args.splice(lastC, 0, c); - } - exports2.log = console.debug || console.log || (() => { - }); - function save(namespaces) { - try { - if (namespaces) { - exports2.storage.setItem("debug", namespaces); - } else { - exports2.storage.removeItem("debug"); - } - } catch (error) { - } - } - function load() { - let r; - try { - r = exports2.storage.getItem("debug"); - } catch (error) { - } - if (!r && typeof process !== "undefined" && "env" in process) { - r = process.env.DEBUG; - } - return r; - } - function localstorage() { - try { - return localStorage; - } catch (error) { - } - } - module2.exports = require_common2()(exports2); - var { formatters } = module2.exports; - formatters.j = function(v) { - try { - return JSON.stringify(v); - } catch (error) { - return "[UnexpectedJSONParseError]: " + error.message; - } - }; - } -}); - -// node_modules/.pnpm/@kwsites+file-exists@1.1.1_supports-color@9.4.0/node_modules/@kwsites/file-exists/dist/src/index.js -var require_src = __commonJS({ - "node_modules/.pnpm/@kwsites+file-exists@1.1.1_supports-color@9.4.0/node_modules/@kwsites/file-exists/dist/src/index.js"(exports2) { - "use strict"; - init_polyfill_buffer(); - var __importDefault = exports2 && exports2.__importDefault || function(mod) { - return mod && mod.__esModule ? mod : { "default": mod }; - }; - Object.defineProperty(exports2, "__esModule", { value: true }); - var fs_1 = require("fs"); - var debug_1 = __importDefault(require_browser()); - var log2 = debug_1.default("@kwsites/file-exists"); - function check(path2, isFile, isDirectory) { - log2(`checking %s`, path2); - try { - const stat = fs_1.statSync(path2); - if (stat.isFile() && isFile) { - log2(`[OK] path represents a file`); - return true; - } - if (stat.isDirectory() && isDirectory) { - log2(`[OK] path represents a directory`); - return true; - } - log2(`[FAIL] path represents something other than a file or directory`); - return false; - } catch (e) { - if (e.code === "ENOENT") { - log2(`[FAIL] path is not accessible: %o`, e); - return false; - } - log2(`[FATAL] %o`, e); - throw e; - } - } - function exists2(path2, type = exports2.READABLE) { - return check(path2, (type & exports2.FILE) > 0, (type & exports2.FOLDER) > 0); - } - exports2.exists = exists2; - exports2.FILE = 1; - exports2.FOLDER = 2; - exports2.READABLE = exports2.FILE + exports2.FOLDER; - } -}); - -// node_modules/.pnpm/@kwsites+file-exists@1.1.1_supports-color@9.4.0/node_modules/@kwsites/file-exists/dist/index.js -var require_dist = __commonJS({ - "node_modules/.pnpm/@kwsites+file-exists@1.1.1_supports-color@9.4.0/node_modules/@kwsites/file-exists/dist/index.js"(exports2) { - "use strict"; - init_polyfill_buffer(); - function __export3(m) { - for (var p in m) - if (!exports2.hasOwnProperty(p)) - exports2[p] = m[p]; - } - Object.defineProperty(exports2, "__esModule", { value: true }); - __export3(require_src()); - } -}); - -// node_modules/.pnpm/@kwsites+promise-deferred@1.1.1/node_modules/@kwsites/promise-deferred/dist/index.js -var require_dist2 = __commonJS({ - "node_modules/.pnpm/@kwsites+promise-deferred@1.1.1/node_modules/@kwsites/promise-deferred/dist/index.js"(exports2) { - "use strict"; - init_polyfill_buffer(); - Object.defineProperty(exports2, "__esModule", { value: true }); - exports2.createDeferred = exports2.deferred = void 0; - function deferred2() { - let done; - let fail; - let status2 = "pending"; - const promise2 = new Promise((_done, _fail) => { - done = _done; - fail = _fail; - }); - return { - promise: promise2, - done(result) { - if (status2 === "pending") { - status2 = "resolved"; - done(result); - } - }, - fail(error) { - if (status2 === "pending") { - status2 = "rejected"; - fail(error); - } - }, - get fulfilled() { - return status2 !== "pending"; - }, - get status() { - return status2; - } - }; - } - exports2.deferred = deferred2; - exports2.createDeferred = deferred2; - exports2.default = deferred2; - } -}); - -// node_modules/.pnpm/color-name@1.1.4/node_modules/color-name/index.js -var require_color_name = __commonJS({ - "node_modules/.pnpm/color-name@1.1.4/node_modules/color-name/index.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - module2.exports = { - "aliceblue": [240, 248, 255], - "antiquewhite": [250, 235, 215], - "aqua": [0, 255, 255], - "aquamarine": [127, 255, 212], - "azure": [240, 255, 255], - "beige": [245, 245, 220], - "bisque": [255, 228, 196], - "black": [0, 0, 0], - "blanchedalmond": [255, 235, 205], - "blue": [0, 0, 255], - "blueviolet": [138, 43, 226], - "brown": [165, 42, 42], - "burlywood": [222, 184, 135], - "cadetblue": [95, 158, 160], - "chartreuse": [127, 255, 0], - "chocolate": [210, 105, 30], - "coral": [255, 127, 80], - "cornflowerblue": [100, 149, 237], - "cornsilk": [255, 248, 220], - "crimson": [220, 20, 60], - "cyan": [0, 255, 255], - "darkblue": [0, 0, 139], - "darkcyan": [0, 139, 139], - "darkgoldenrod": [184, 134, 11], - "darkgray": [169, 169, 169], - "darkgreen": [0, 100, 0], - "darkgrey": [169, 169, 169], - "darkkhaki": [189, 183, 107], - "darkmagenta": [139, 0, 139], - "darkolivegreen": [85, 107, 47], - "darkorange": [255, 140, 0], - "darkorchid": [153, 50, 204], - "darkred": [139, 0, 0], - "darksalmon": [233, 150, 122], - "darkseagreen": [143, 188, 143], - "darkslateblue": [72, 61, 139], - "darkslategray": [47, 79, 79], - "darkslategrey": [47, 79, 79], - "darkturquoise": [0, 206, 209], - "darkviolet": [148, 0, 211], - "deeppink": [255, 20, 147], - "deepskyblue": [0, 191, 255], - "dimgray": [105, 105, 105], - "dimgrey": [105, 105, 105], - "dodgerblue": [30, 144, 255], - "firebrick": [178, 34, 34], - "floralwhite": [255, 250, 240], - "forestgreen": [34, 139, 34], - "fuchsia": [255, 0, 255], - "gainsboro": [220, 220, 220], - "ghostwhite": [248, 248, 255], - "gold": [255, 215, 0], - "goldenrod": [218, 165, 32], - "gray": [128, 128, 128], - "green": [0, 128, 0], - "greenyellow": [173, 255, 47], - "grey": [128, 128, 128], - "honeydew": [240, 255, 240], - "hotpink": [255, 105, 180], - "indianred": [205, 92, 92], - "indigo": [75, 0, 130], - "ivory": [255, 255, 240], - "khaki": [240, 230, 140], - "lavender": [230, 230, 250], - "lavenderblush": [255, 240, 245], - "lawngreen": [124, 252, 0], - "lemonchiffon": [255, 250, 205], - "lightblue": [173, 216, 230], - "lightcoral": [240, 128, 128], - "lightcyan": [224, 255, 255], - "lightgoldenrodyellow": [250, 250, 210], - "lightgray": [211, 211, 211], - "lightgreen": [144, 238, 144], - "lightgrey": [211, 211, 211], - "lightpink": [255, 182, 193], - "lightsalmon": [255, 160, 122], - "lightseagreen": [32, 178, 170], - "lightskyblue": [135, 206, 250], - "lightslategray": [119, 136, 153], - "lightslategrey": [119, 136, 153], - "lightsteelblue": [176, 196, 222], - "lightyellow": [255, 255, 224], - "lime": [0, 255, 0], - "limegreen": [50, 205, 50], - "linen": [250, 240, 230], - "magenta": [255, 0, 255], - "maroon": [128, 0, 0], - "mediumaquamarine": [102, 205, 170], - "mediumblue": [0, 0, 205], - "mediumorchid": [186, 85, 211], - "mediumpurple": [147, 112, 219], - "mediumseagreen": [60, 179, 113], - "mediumslateblue": [123, 104, 238], - "mediumspringgreen": [0, 250, 154], - "mediumturquoise": [72, 209, 204], - "mediumvioletred": [199, 21, 133], - "midnightblue": [25, 25, 112], - "mintcream": [245, 255, 250], - "mistyrose": [255, 228, 225], - "moccasin": [255, 228, 181], - "navajowhite": [255, 222, 173], - "navy": [0, 0, 128], - "oldlace": [253, 245, 230], - "olive": [128, 128, 0], - "olivedrab": [107, 142, 35], - "orange": [255, 165, 0], - "orangered": [255, 69, 0], - "orchid": [218, 112, 214], - "palegoldenrod": [238, 232, 170], - "palegreen": [152, 251, 152], - "paleturquoise": [175, 238, 238], - "palevioletred": [219, 112, 147], - "papayawhip": [255, 239, 213], - "peachpuff": [255, 218, 185], - "peru": [205, 133, 63], - "pink": [255, 192, 203], - "plum": [221, 160, 221], - "powderblue": [176, 224, 230], - "purple": [128, 0, 128], - "rebeccapurple": [102, 51, 153], - "red": [255, 0, 0], - "rosybrown": [188, 143, 143], - "royalblue": [65, 105, 225], - "saddlebrown": [139, 69, 19], - "salmon": [250, 128, 114], - "sandybrown": [244, 164, 96], - "seagreen": [46, 139, 87], - "seashell": [255, 245, 238], - "sienna": [160, 82, 45], - "silver": [192, 192, 192], - "skyblue": [135, 206, 235], - "slateblue": [106, 90, 205], - "slategray": [112, 128, 144], - "slategrey": [112, 128, 144], - "snow": [255, 250, 250], - "springgreen": [0, 255, 127], - "steelblue": [70, 130, 180], - "tan": [210, 180, 140], - "teal": [0, 128, 128], - "thistle": [216, 191, 216], - "tomato": [255, 99, 71], - "turquoise": [64, 224, 208], - "violet": [238, 130, 238], - "wheat": [245, 222, 179], - "white": [255, 255, 255], - "whitesmoke": [245, 245, 245], - "yellow": [255, 255, 0], - "yellowgreen": [154, 205, 50] - }; - } -}); - -// node_modules/.pnpm/css-unit-converter@1.1.2/node_modules/css-unit-converter/index.js -var require_css_unit_converter = __commonJS({ - "node_modules/.pnpm/css-unit-converter@1.1.2/node_modules/css-unit-converter/index.js"(exports2, module2) { - init_polyfill_buffer(); - var conversions = { - // length - "px": { - "px": 1, - "cm": 96 / 2.54, - "mm": 96 / 25.4, - "in": 96, - "pt": 96 / 72, - "pc": 16 - }, - "cm": { - "px": 2.54 / 96, - "cm": 1, - "mm": 0.1, - "in": 2.54, - "pt": 2.54 / 72, - "pc": 2.54 / 6 - }, - "mm": { - "px": 25.4 / 96, - "cm": 10, - "mm": 1, - "in": 25.4, - "pt": 25.4 / 72, - "pc": 25.4 / 6 - }, - "in": { - "px": 1 / 96, - "cm": 1 / 2.54, - "mm": 1 / 25.4, - "in": 1, - "pt": 1 / 72, - "pc": 1 / 6 - }, - "pt": { - "px": 0.75, - "cm": 72 / 2.54, - "mm": 72 / 25.4, - "in": 72, - "pt": 1, - "pc": 12 - }, - "pc": { - "px": 6 / 96, - "cm": 6 / 2.54, - "mm": 6 / 25.4, - "in": 6, - "pt": 6 / 72, - "pc": 1 - }, - // angle - "deg": { - "deg": 1, - "grad": 0.9, - "rad": 180 / Math.PI, - "turn": 360 - }, - "grad": { - "deg": 400 / 360, - "grad": 1, - "rad": 200 / Math.PI, - "turn": 400 - }, - "rad": { - "deg": Math.PI / 180, - "grad": Math.PI / 200, - "rad": 1, - "turn": Math.PI * 2 - }, - "turn": { - "deg": 1 / 360, - "grad": 1 / 400, - "rad": 0.5 / Math.PI, - "turn": 1 - }, - // time - "s": { - "s": 1, - "ms": 1 / 1e3 - }, - "ms": { - "s": 1e3, - "ms": 1 - }, - // frequency - "Hz": { - "Hz": 1, - "kHz": 1e3 - }, - "kHz": { - "Hz": 1 / 1e3, - "kHz": 1 - }, - // resolution - "dpi": { - "dpi": 1, - "dpcm": 1 / 2.54, - "dppx": 1 / 96 - }, - "dpcm": { - "dpi": 2.54, - "dpcm": 1, - "dppx": 2.54 / 96 - }, - "dppx": { - "dpi": 96, - "dpcm": 96 / 2.54, - "dppx": 1 - } - }; - module2.exports = function(value, sourceUnit, targetUnit, precision) { - if (!conversions.hasOwnProperty(targetUnit)) - throw new Error("Cannot convert to " + targetUnit); - if (!conversions[targetUnit].hasOwnProperty(sourceUnit)) - throw new Error("Cannot convert from " + sourceUnit + " to " + targetUnit); - var converted = conversions[targetUnit][sourceUnit] * value; - if (precision !== false) { - precision = Math.pow(10, parseInt(precision) || 5); - return Math.round(converted * precision) / precision; - } - return converted; - }; - } -}); - -// node_modules/.pnpm/css-color-converter@2.0.0/node_modules/css-color-converter/lib/index.js -var require_lib3 = __commonJS({ - "node_modules/.pnpm/css-color-converter@2.0.0/node_modules/css-color-converter/lib/index.js"(exports2) { - "use strict"; - init_polyfill_buffer(); - Object.defineProperty(exports2, "__esModule", { - value: true - }); - exports2.fromRgba = fromRgba; - exports2.fromRgb = fromRgb; - exports2.fromHsla = fromHsla; - exports2.fromHsl = fromHsl; - exports2.fromString = fromString2; - exports2["default"] = void 0; - var _colorName = _interopRequireDefault(require_color_name()); - var _cssUnitConverter = _interopRequireDefault(require_css_unit_converter()); - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { "default": obj }; - } - function _classCallCheck(instance10, Constructor) { - if (!(instance10 instanceof Constructor)) { - throw new TypeError("Cannot call a class as a function"); - } - } - function _defineProperties(target, props) { - for (var i = 0; i < props.length; i++) { - var descriptor = props[i]; - descriptor.enumerable = descriptor.enumerable || false; - descriptor.configurable = true; - if ("value" in descriptor) - descriptor.writable = true; - Object.defineProperty(target, descriptor.key, descriptor); - } - } - function _createClass(Constructor, protoProps, staticProps) { - if (protoProps) - _defineProperties(Constructor.prototype, protoProps); - if (staticProps) - _defineProperties(Constructor, staticProps); - return Constructor; - } - function _slicedToArray(arr, i) { - return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray2(arr, i) || _nonIterableRest(); - } - function _nonIterableRest() { - throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); - } - function _unsupportedIterableToArray2(o, minLen) { - if (!o) - return; - if (typeof o === "string") - return _arrayLikeToArray2(o, minLen); - var n = Object.prototype.toString.call(o).slice(8, -1); - if (n === "Object" && o.constructor) - n = o.constructor.name; - if (n === "Map" || n === "Set") - return Array.from(o); - if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) - return _arrayLikeToArray2(o, minLen); - } - function _arrayLikeToArray2(arr, len) { - if (len == null || len > arr.length) - len = arr.length; - for (var i = 0, arr2 = new Array(len); i < len; i++) { - arr2[i] = arr[i]; - } - return arr2; - } - function _iterableToArrayLimit(arr, i) { - if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) - return; - var _arr = []; - var _n = true; - var _d = false; - var _e = void 0; - try { - for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { - _arr.push(_s.value); - if (i && _arr.length === i) - break; - } - } catch (err) { - _d = true; - _e = err; - } finally { - try { - if (!_n && _i["return"] != null) - _i["return"](); - } finally { - if (_d) - throw _e; - } - } - return _arr; - } - function _arrayWithHoles(arr) { - if (Array.isArray(arr)) - return arr; - } - var hex = /^#([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})?$/; - var shortHex = /^#([0-9a-fA-F])([0-9a-fA-F])([0-9a-fA-F])([0-9a-fA-F])?$/; - var rgb = /^rgba?\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)(?:\s*,\s*(0|1|0?\.\d+|\d+%))?\s*\)$/; - var rgbfn = /^rgba?\(\s*(\d+)\s+(\d+)\s+(\d+)(?:\s*\/\s*(0|1|0?\.\d+|\d+%))?\s*\)$/; - var rgbperc = /^rgba?\(\s*(\d+%)\s*,\s*(\d+%)\s*,\s*(\d+%)(?:\s*,\s*(0|1|0?\.\d+|\d+%))?\s*\)$/; - var rgbpercfn = /^rgba?\(\s*(\d+%)\s+(\d+%)\s+(\d+%)(?:\s*\/\s*(0|1|0?\.\d+|\d+%))?\s*\)$/; - var hsl = /^hsla?\(\s*(\d+)(deg|rad|grad|turn)?\s*,\s*(\d+)%\s*,\s*(\d+)%(?:\s*,\s*(0|1|0?\.\d+|\d+%))?\s*\)$/; - function contains2(haystack, needle) { - return haystack.indexOf(needle) > -1; - } - function rgbToHsl(r, g, b) { - var rprim = r / 255; - var gprim = g / 255; - var bprim = b / 255; - var cmax = Math.max(rprim, gprim, bprim); - var cmin = Math.min(rprim, gprim, bprim); - var delta = cmax - cmin; - var l = (cmax + cmin) / 2; - if (delta === 0) { - return [0, 0, l * 100]; - } - var s = delta / (1 - Math.abs(2 * l - 1)); - var h = function() { - switch (cmax) { - case rprim: { - return (gprim - bprim) / delta % 6; - } - case gprim: { - return (bprim - rprim) / delta + 2; - } - default: { - return (rprim - gprim) / delta + 4; - } - } - }(); - return [h * 60, s * 100, l * 100]; - } - function hslToRgb(h, s, l) { - var hprim = h / 60; - var sprim = s / 100; - var lprim = l / 100; - var c = (1 - Math.abs(2 * lprim - 1)) * sprim; - var x = c * (1 - Math.abs(hprim % 2 - 1)); - var m = lprim - c / 2; - var _ref = function() { - if (hprim < 1) - return [c, x, 0]; - if (hprim < 2) - return [x, c, 0]; - if (hprim < 3) - return [0, c, x]; - if (hprim < 4) - return [0, x, c]; - if (hprim < 5) - return [x, 0, c]; - return [c, 0, x]; - }(), _ref2 = _slicedToArray(_ref, 3), rprim = _ref2[0], gprim = _ref2[1], bprim = _ref2[2]; - return [(rprim + m) * 255, (gprim + m) * 255, (bprim + m) * 255]; - } - var Color = /* @__PURE__ */ function() { - function Color2(_ref3) { - var _ref4 = _slicedToArray(_ref3, 4), r = _ref4[0], g = _ref4[1], b = _ref4[2], a = _ref4[3]; - _classCallCheck(this, Color2); - this.values = [Math.max(Math.min(parseInt(r, 10), 255), 0), Math.max(Math.min(parseInt(g, 10), 255), 0), Math.max(Math.min(parseInt(b, 10), 255), 0), a == null ? 1 : Math.max(Math.min(parseFloat(a), 255), 0)]; - } - _createClass(Color2, [{ - key: "toRgbString", - value: function toRgbString() { - var _this$values = _slicedToArray(this.values, 4), r = _this$values[0], g = _this$values[1], b = _this$values[2], a = _this$values[3]; - if (a === 1) { - return "rgb(".concat(r, ", ").concat(g, ", ").concat(b, ")"); - } - return "rgba(".concat(r, ", ").concat(g, ", ").concat(b, ", ").concat(a, ")"); - } - }, { - key: "toHslString", - value: function toHslString() { - var _this$toHslaArray = this.toHslaArray(), _this$toHslaArray2 = _slicedToArray(_this$toHslaArray, 4), h = _this$toHslaArray2[0], s = _this$toHslaArray2[1], l = _this$toHslaArray2[2], a = _this$toHslaArray2[3]; - if (a === 1) { - return "hsl(".concat(h, ", ").concat(s, "%, ").concat(l, "%)"); - } - return "hsla(".concat(h, ", ").concat(s, "%, ").concat(l, "%, ").concat(a, ")"); - } - }, { - key: "toHexString", - value: function toHexString() { - var _this$values2 = _slicedToArray(this.values, 4), r = _this$values2[0], g = _this$values2[1], b = _this$values2[2], a = _this$values2[3]; - r = Number(r).toString(16).padStart(2, "0"); - g = Number(g).toString(16).padStart(2, "0"); - b = Number(b).toString(16).padStart(2, "0"); - a = a < 1 ? parseInt(a * 255, 10).toString(16).padStart(2, "0") : ""; - return "#".concat(r).concat(g).concat(b).concat(a); - } - }, { - key: "toRgbaArray", - value: function toRgbaArray() { - return this.values; - } - }, { - key: "toHslaArray", - value: function toHslaArray() { - var _this$values3 = _slicedToArray(this.values, 4), r = _this$values3[0], g = _this$values3[1], b = _this$values3[2], a = _this$values3[3]; - var _rgbToHsl = rgbToHsl(r, g, b), _rgbToHsl2 = _slicedToArray(_rgbToHsl, 3), h = _rgbToHsl2[0], s = _rgbToHsl2[1], l = _rgbToHsl2[2]; - return [h, s, l, a]; - } - }]); - return Color2; - }(); - function fromRgba(_ref5) { - var _ref6 = _slicedToArray(_ref5, 4), r = _ref6[0], g = _ref6[1], b = _ref6[2], a = _ref6[3]; - return new Color([r, g, b, a]); - } - function fromRgb(_ref7) { - var _ref8 = _slicedToArray(_ref7, 3), r = _ref8[0], g = _ref8[1], b = _ref8[2]; - return fromRgba([r, g, b, 1]); - } - function fromHsla(_ref9) { - var _ref10 = _slicedToArray(_ref9, 4), h = _ref10[0], s = _ref10[1], l = _ref10[2], a = _ref10[3]; - var _hslToRgb = hslToRgb(h, s, l), _hslToRgb2 = _slicedToArray(_hslToRgb, 3), r = _hslToRgb2[0], g = _hslToRgb2[1], b = _hslToRgb2[2]; - return fromRgba([r, g, b, a]); - } - function fromHsl(_ref11) { - var _ref12 = _slicedToArray(_ref11, 3), h = _ref12[0], s = _ref12[1], l = _ref12[2]; - return fromHsla([h, s, l, 1]); - } - function fromHexString(str) { - var _ref13 = hex.exec(str) || shortHex.exec(str), _ref14 = _slicedToArray(_ref13, 5), r = _ref14[1], g = _ref14[2], b = _ref14[3], a = _ref14[4]; - r = parseInt(r.length < 2 ? r.repeat(2) : r, 16); - g = parseInt(g.length < 2 ? g.repeat(2) : g, 16); - b = parseInt(b.length < 2 ? b.repeat(2) : b, 16); - a = a && (parseInt(a.length < 2 ? a.repeat(2) : a, 16) / 255).toPrecision(1) || 1; - return fromRgba([r, g, b, a]); - } - function fromRgbString(str) { - var _ref15 = rgb.exec(str) || rgbperc.exec(str) || rgbfn.exec(str) || rgbpercfn.exec(str), _ref16 = _slicedToArray(_ref15, 5), r = _ref16[1], g = _ref16[2], b = _ref16[3], a = _ref16[4]; - r = contains2(r, "%") ? parseInt(r, 10) * 255 / 100 : parseInt(r, 10); - g = contains2(g, "%") ? parseInt(g, 10) * 255 / 100 : parseInt(g, 10); - b = contains2(b, "%") > 0 ? parseInt(b, 10) * 255 / 100 : parseInt(b, 10); - a = a === void 0 ? 1 : parseFloat(a) / (contains2(a, "%") ? 100 : 1); - return fromRgba([r, g, b, a]); - } - function fromHslString(str) { - var _hsl$exec = hsl.exec(str), _hsl$exec2 = _slicedToArray(_hsl$exec, 6), h = _hsl$exec2[1], unit = _hsl$exec2[2], s = _hsl$exec2[3], l = _hsl$exec2[4], a = _hsl$exec2[5]; - unit = unit || "deg"; - h = (0, _cssUnitConverter["default"])(parseFloat(h), unit, "deg"); - s = parseFloat(s); - l = parseFloat(l); - a = a === void 0 ? 1 : parseFloat(a) / (contains2(a, "%") ? 100 : 1); - return fromHsla([h, s, l, a]); - } - function fromString2(str) { - if (_colorName["default"][str]) { - return fromRgb(_colorName["default"][str]); - } - if (hex.test(str) || shortHex.test(str)) { - return fromHexString(str); - } - if (rgb.test(str) || rgbperc.test(str) || rgbfn.test(str) || rgbpercfn.test(str)) { - return fromRgbString(str); - } - if (hsl.test(str)) { - return fromHslString(str); - } - return null; - } - var _default = { - fromString: fromString2, - fromRgb, - fromRgba, - fromHsl, - fromHsla - }; - exports2["default"] = _default; - } -}); - -// node_modules/.pnpm/object-keys@1.1.1/node_modules/object-keys/isArguments.js -var require_isArguments = __commonJS({ - "node_modules/.pnpm/object-keys@1.1.1/node_modules/object-keys/isArguments.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - var toStr = Object.prototype.toString; - module2.exports = function isArguments(value) { - var str = toStr.call(value); - var isArgs = str === "[object Arguments]"; - if (!isArgs) { - isArgs = str !== "[object Array]" && value !== null && typeof value === "object" && typeof value.length === "number" && value.length >= 0 && toStr.call(value.callee) === "[object Function]"; - } - return isArgs; - }; - } -}); - -// node_modules/.pnpm/object-keys@1.1.1/node_modules/object-keys/implementation.js -var require_implementation = __commonJS({ - "node_modules/.pnpm/object-keys@1.1.1/node_modules/object-keys/implementation.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - var keysShim; - if (!Object.keys) { - has = Object.prototype.hasOwnProperty; - toStr = Object.prototype.toString; - isArgs = require_isArguments(); - isEnumerable = Object.prototype.propertyIsEnumerable; - hasDontEnumBug = !isEnumerable.call({ toString: null }, "toString"); - hasProtoEnumBug = isEnumerable.call(function() { - }, "prototype"); - dontEnums = [ - "toString", - "toLocaleString", - "valueOf", - "hasOwnProperty", - "isPrototypeOf", - "propertyIsEnumerable", - "constructor" - ]; - equalsConstructorPrototype = function(o) { - var ctor = o.constructor; - return ctor && ctor.prototype === o; - }; - excludedKeys = { - $applicationCache: true, - $console: true, - $external: true, - $frame: true, - $frameElement: true, - $frames: true, - $innerHeight: true, - $innerWidth: true, - $onmozfullscreenchange: true, - $onmozfullscreenerror: true, - $outerHeight: true, - $outerWidth: true, - $pageXOffset: true, - $pageYOffset: true, - $parent: true, - $scrollLeft: true, - $scrollTop: true, - $scrollX: true, - $scrollY: true, - $self: true, - $webkitIndexedDB: true, - $webkitStorageInfo: true, - $window: true - }; - hasAutomationEqualityBug = function() { - if (typeof window === "undefined") { - return false; - } - for (var k in window) { - try { - if (!excludedKeys["$" + k] && has.call(window, k) && window[k] !== null && typeof window[k] === "object") { - try { - equalsConstructorPrototype(window[k]); - } catch (e) { - return true; - } - } - } catch (e) { - return true; - } - } - return false; - }(); - equalsConstructorPrototypeIfNotBuggy = function(o) { - if (typeof window === "undefined" || !hasAutomationEqualityBug) { - return equalsConstructorPrototype(o); - } - try { - return equalsConstructorPrototype(o); - } catch (e) { - return false; - } - }; - keysShim = function keys(object) { - var isObject2 = object !== null && typeof object === "object"; - var isFunction2 = toStr.call(object) === "[object Function]"; - var isArguments = isArgs(object); - var isString = isObject2 && toStr.call(object) === "[object String]"; - var theKeys = []; - if (!isObject2 && !isFunction2 && !isArguments) { - throw new TypeError("Object.keys called on a non-object"); - } - var skipProto = hasProtoEnumBug && isFunction2; - if (isString && object.length > 0 && !has.call(object, 0)) { - for (var i = 0; i < object.length; ++i) { - theKeys.push(String(i)); - } - } - if (isArguments && object.length > 0) { - for (var j = 0; j < object.length; ++j) { - theKeys.push(String(j)); - } - } else { - for (var name in object) { - if (!(skipProto && name === "prototype") && has.call(object, name)) { - theKeys.push(String(name)); - } - } - } - if (hasDontEnumBug) { - var skipConstructor = equalsConstructorPrototypeIfNotBuggy(object); - for (var k = 0; k < dontEnums.length; ++k) { - if (!(skipConstructor && dontEnums[k] === "constructor") && has.call(object, dontEnums[k])) { - theKeys.push(dontEnums[k]); - } - } - } - return theKeys; - }; - } - var has; - var toStr; - var isArgs; - var isEnumerable; - var hasDontEnumBug; - var hasProtoEnumBug; - var dontEnums; - var equalsConstructorPrototype; - var excludedKeys; - var hasAutomationEqualityBug; - var equalsConstructorPrototypeIfNotBuggy; - module2.exports = keysShim; - } -}); - -// node_modules/.pnpm/object-keys@1.1.1/node_modules/object-keys/index.js -var require_object_keys = __commonJS({ - "node_modules/.pnpm/object-keys@1.1.1/node_modules/object-keys/index.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - var slice = Array.prototype.slice; - var isArgs = require_isArguments(); - var origKeys = Object.keys; - var keysShim = origKeys ? function keys(o) { - return origKeys(o); - } : require_implementation(); - var originalKeys = Object.keys; - keysShim.shim = function shimObjectKeys() { - if (Object.keys) { - var keysWorksWithArguments = function() { - var args = Object.keys(arguments); - return args && args.length === arguments.length; - }(1, 2); - if (!keysWorksWithArguments) { - Object.keys = function keys(object) { - if (isArgs(object)) { - return originalKeys(slice.call(object)); - } - return originalKeys(object); - }; - } - } else { - Object.keys = keysShim; - } - return Object.keys || keysShim; - }; - module2.exports = keysShim; - } -}); - -// node_modules/.pnpm/es-errors@1.3.0/node_modules/es-errors/index.js -var require_es_errors = __commonJS({ - "node_modules/.pnpm/es-errors@1.3.0/node_modules/es-errors/index.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - module2.exports = Error; - } -}); - -// node_modules/.pnpm/es-errors@1.3.0/node_modules/es-errors/eval.js -var require_eval = __commonJS({ - "node_modules/.pnpm/es-errors@1.3.0/node_modules/es-errors/eval.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - module2.exports = EvalError; - } -}); - -// node_modules/.pnpm/es-errors@1.3.0/node_modules/es-errors/range.js -var require_range = __commonJS({ - "node_modules/.pnpm/es-errors@1.3.0/node_modules/es-errors/range.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - module2.exports = RangeError; - } -}); - -// node_modules/.pnpm/es-errors@1.3.0/node_modules/es-errors/ref.js -var require_ref = __commonJS({ - "node_modules/.pnpm/es-errors@1.3.0/node_modules/es-errors/ref.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - module2.exports = ReferenceError; - } -}); - -// node_modules/.pnpm/es-errors@1.3.0/node_modules/es-errors/syntax.js -var require_syntax = __commonJS({ - "node_modules/.pnpm/es-errors@1.3.0/node_modules/es-errors/syntax.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - module2.exports = SyntaxError; - } -}); - -// node_modules/.pnpm/es-errors@1.3.0/node_modules/es-errors/type.js -var require_type = __commonJS({ - "node_modules/.pnpm/es-errors@1.3.0/node_modules/es-errors/type.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - module2.exports = TypeError; - } -}); - -// node_modules/.pnpm/es-errors@1.3.0/node_modules/es-errors/uri.js -var require_uri = __commonJS({ - "node_modules/.pnpm/es-errors@1.3.0/node_modules/es-errors/uri.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - module2.exports = URIError; - } -}); - -// node_modules/.pnpm/has-symbols@1.0.3/node_modules/has-symbols/shams.js -var require_shams = __commonJS({ - "node_modules/.pnpm/has-symbols@1.0.3/node_modules/has-symbols/shams.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - module2.exports = function hasSymbols() { - if (typeof Symbol !== "function" || typeof Object.getOwnPropertySymbols !== "function") { - return false; - } - if (typeof Symbol.iterator === "symbol") { - return true; - } - var obj = {}; - var sym = Symbol("test"); - var symObj = Object(sym); - if (typeof sym === "string") { - return false; - } - if (Object.prototype.toString.call(sym) !== "[object Symbol]") { - return false; - } - if (Object.prototype.toString.call(symObj) !== "[object Symbol]") { - return false; - } - var symVal = 42; - obj[sym] = symVal; - for (sym in obj) { - return false; - } - if (typeof Object.keys === "function" && Object.keys(obj).length !== 0) { - return false; - } - if (typeof Object.getOwnPropertyNames === "function" && Object.getOwnPropertyNames(obj).length !== 0) { - return false; - } - var syms = Object.getOwnPropertySymbols(obj); - if (syms.length !== 1 || syms[0] !== sym) { - return false; - } - if (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { - return false; - } - if (typeof Object.getOwnPropertyDescriptor === "function") { - var descriptor = Object.getOwnPropertyDescriptor(obj, sym); - if (descriptor.value !== symVal || descriptor.enumerable !== true) { - return false; - } - } - return true; - }; - } -}); - -// node_modules/.pnpm/has-symbols@1.0.3/node_modules/has-symbols/index.js -var require_has_symbols = __commonJS({ - "node_modules/.pnpm/has-symbols@1.0.3/node_modules/has-symbols/index.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - var origSymbol = typeof Symbol !== "undefined" && Symbol; - var hasSymbolSham = require_shams(); - module2.exports = function hasNativeSymbols() { - if (typeof origSymbol !== "function") { - return false; - } - if (typeof Symbol !== "function") { - return false; - } - if (typeof origSymbol("foo") !== "symbol") { - return false; - } - if (typeof Symbol("bar") !== "symbol") { - return false; - } - return hasSymbolSham(); - }; - } -}); - -// node_modules/.pnpm/has-proto@1.0.1/node_modules/has-proto/index.js -var require_has_proto = __commonJS({ - "node_modules/.pnpm/has-proto@1.0.1/node_modules/has-proto/index.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - var test = { - foo: {} - }; - var $Object = Object; - module2.exports = function hasProto() { - return { __proto__: test }.foo === test.foo && !({ __proto__: null } instanceof $Object); - }; - } -}); - -// node_modules/.pnpm/function-bind@1.1.2/node_modules/function-bind/implementation.js -var require_implementation2 = __commonJS({ - "node_modules/.pnpm/function-bind@1.1.2/node_modules/function-bind/implementation.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - var ERROR_MESSAGE = "Function.prototype.bind called on incompatible "; - var toStr = Object.prototype.toString; - var max = Math.max; - var funcType = "[object Function]"; - var concatty = function concatty2(a, b) { - var arr = []; - for (var i = 0; i < a.length; i += 1) { - arr[i] = a[i]; - } - for (var j = 0; j < b.length; j += 1) { - arr[j + a.length] = b[j]; - } - return arr; - }; - var slicy = function slicy2(arrLike, offset) { - var arr = []; - for (var i = offset || 0, j = 0; i < arrLike.length; i += 1, j += 1) { - arr[j] = arrLike[i]; - } - return arr; - }; - var joiny = function(arr, joiner) { - var str = ""; - for (var i = 0; i < arr.length; i += 1) { - str += arr[i]; - if (i + 1 < arr.length) { - str += joiner; - } - } - return str; - }; - module2.exports = function bind(that) { - var target = this; - if (typeof target !== "function" || toStr.apply(target) !== funcType) { - throw new TypeError(ERROR_MESSAGE + target); - } - var args = slicy(arguments, 1); - var bound; - var binder = function() { - if (this instanceof bound) { - var result = target.apply( - this, - concatty(args, arguments) - ); - if (Object(result) === result) { - return result; - } - return this; - } - return target.apply( - that, - concatty(args, arguments) - ); - }; - var boundLength = max(0, target.length - args.length); - var boundArgs = []; - for (var i = 0; i < boundLength; i++) { - boundArgs[i] = "$" + i; - } - bound = Function("binder", "return function (" + joiny(boundArgs, ",") + "){ return binder.apply(this,arguments); }")(binder); - if (target.prototype) { - var Empty = function Empty2() { - }; - Empty.prototype = target.prototype; - bound.prototype = new Empty(); - Empty.prototype = null; - } - return bound; - }; - } -}); - -// node_modules/.pnpm/function-bind@1.1.2/node_modules/function-bind/index.js -var require_function_bind = __commonJS({ - "node_modules/.pnpm/function-bind@1.1.2/node_modules/function-bind/index.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - var implementation = require_implementation2(); - module2.exports = Function.prototype.bind || implementation; - } -}); - -// node_modules/.pnpm/hasown@2.0.1/node_modules/hasown/index.js -var require_hasown = __commonJS({ - "node_modules/.pnpm/hasown@2.0.1/node_modules/hasown/index.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - var call = Function.prototype.call; - var $hasOwn = Object.prototype.hasOwnProperty; - var bind = require_function_bind(); - module2.exports = bind.call(call, $hasOwn); - } -}); - -// node_modules/.pnpm/get-intrinsic@1.2.4/node_modules/get-intrinsic/index.js -var require_get_intrinsic = __commonJS({ - "node_modules/.pnpm/get-intrinsic@1.2.4/node_modules/get-intrinsic/index.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - var undefined2; - var $Error = require_es_errors(); - var $EvalError = require_eval(); - var $RangeError = require_range(); - var $ReferenceError = require_ref(); - var $SyntaxError = require_syntax(); - var $TypeError = require_type(); - var $URIError = require_uri(); - var $Function = Function; - var getEvalledConstructor = function(expressionSyntax) { - try { - return $Function('"use strict"; return (' + expressionSyntax + ").constructor;")(); - } catch (e) { - } - }; - var $gOPD = Object.getOwnPropertyDescriptor; - if ($gOPD) { - try { - $gOPD({}, ""); - } catch (e) { - $gOPD = null; - } - } - var throwTypeError = function() { - throw new $TypeError(); - }; - var ThrowTypeError = $gOPD ? function() { - try { - arguments.callee; - return throwTypeError; - } catch (calleeThrows) { - try { - return $gOPD(arguments, "callee").get; - } catch (gOPDthrows) { - return throwTypeError; - } - } - }() : throwTypeError; - var hasSymbols = require_has_symbols()(); - var hasProto = require_has_proto()(); - var getProto = Object.getPrototypeOf || (hasProto ? function(x) { - return x.__proto__; - } : null); - var needsEval = {}; - var TypedArray = typeof Uint8Array === "undefined" || !getProto ? undefined2 : getProto(Uint8Array); - var INTRINSICS = { - __proto__: null, - "%AggregateError%": typeof AggregateError === "undefined" ? undefined2 : AggregateError, - "%Array%": Array, - "%ArrayBuffer%": typeof ArrayBuffer === "undefined" ? undefined2 : ArrayBuffer, - "%ArrayIteratorPrototype%": hasSymbols && getProto ? getProto([][Symbol.iterator]()) : undefined2, - "%AsyncFromSyncIteratorPrototype%": undefined2, - "%AsyncFunction%": needsEval, - "%AsyncGenerator%": needsEval, - "%AsyncGeneratorFunction%": needsEval, - "%AsyncIteratorPrototype%": needsEval, - "%Atomics%": typeof Atomics === "undefined" ? undefined2 : Atomics, - "%BigInt%": typeof BigInt === "undefined" ? undefined2 : BigInt, - "%BigInt64Array%": typeof BigInt64Array === "undefined" ? undefined2 : BigInt64Array, - "%BigUint64Array%": typeof BigUint64Array === "undefined" ? undefined2 : BigUint64Array, - "%Boolean%": Boolean, - "%DataView%": typeof DataView === "undefined" ? undefined2 : DataView, - "%Date%": Date, - "%decodeURI%": decodeURI, - "%decodeURIComponent%": decodeURIComponent, - "%encodeURI%": encodeURI, - "%encodeURIComponent%": encodeURIComponent, - "%Error%": $Error, - "%eval%": eval, - // eslint-disable-line no-eval - "%EvalError%": $EvalError, - "%Float32Array%": typeof Float32Array === "undefined" ? undefined2 : Float32Array, - "%Float64Array%": typeof Float64Array === "undefined" ? undefined2 : Float64Array, - "%FinalizationRegistry%": typeof FinalizationRegistry === "undefined" ? undefined2 : FinalizationRegistry, - "%Function%": $Function, - "%GeneratorFunction%": needsEval, - "%Int8Array%": typeof Int8Array === "undefined" ? undefined2 : Int8Array, - "%Int16Array%": typeof Int16Array === "undefined" ? undefined2 : Int16Array, - "%Int32Array%": typeof Int32Array === "undefined" ? undefined2 : Int32Array, - "%isFinite%": isFinite, - "%isNaN%": isNaN, - "%IteratorPrototype%": hasSymbols && getProto ? getProto(getProto([][Symbol.iterator]())) : undefined2, - "%JSON%": typeof JSON === "object" ? JSON : undefined2, - "%Map%": typeof Map === "undefined" ? undefined2 : Map, - "%MapIteratorPrototype%": typeof Map === "undefined" || !hasSymbols || !getProto ? undefined2 : getProto((/* @__PURE__ */ new Map())[Symbol.iterator]()), - "%Math%": Math, - "%Number%": Number, - "%Object%": Object, - "%parseFloat%": parseFloat, - "%parseInt%": parseInt, - "%Promise%": typeof Promise === "undefined" ? undefined2 : Promise, - "%Proxy%": typeof Proxy === "undefined" ? undefined2 : Proxy, - "%RangeError%": $RangeError, - "%ReferenceError%": $ReferenceError, - "%Reflect%": typeof Reflect === "undefined" ? undefined2 : Reflect, - "%RegExp%": RegExp, - "%Set%": typeof Set === "undefined" ? undefined2 : Set, - "%SetIteratorPrototype%": typeof Set === "undefined" || !hasSymbols || !getProto ? undefined2 : getProto((/* @__PURE__ */ new Set())[Symbol.iterator]()), - "%SharedArrayBuffer%": typeof SharedArrayBuffer === "undefined" ? undefined2 : SharedArrayBuffer, - "%String%": String, - "%StringIteratorPrototype%": hasSymbols && getProto ? getProto(""[Symbol.iterator]()) : undefined2, - "%Symbol%": hasSymbols ? Symbol : undefined2, - "%SyntaxError%": $SyntaxError, - "%ThrowTypeError%": ThrowTypeError, - "%TypedArray%": TypedArray, - "%TypeError%": $TypeError, - "%Uint8Array%": typeof Uint8Array === "undefined" ? undefined2 : Uint8Array, - "%Uint8ClampedArray%": typeof Uint8ClampedArray === "undefined" ? undefined2 : Uint8ClampedArray, - "%Uint16Array%": typeof Uint16Array === "undefined" ? undefined2 : Uint16Array, - "%Uint32Array%": typeof Uint32Array === "undefined" ? undefined2 : Uint32Array, - "%URIError%": $URIError, - "%WeakMap%": typeof WeakMap === "undefined" ? undefined2 : WeakMap, - "%WeakRef%": typeof WeakRef === "undefined" ? undefined2 : WeakRef, - "%WeakSet%": typeof WeakSet === "undefined" ? undefined2 : WeakSet - }; - if (getProto) { - try { - null.error; - } catch (e) { - errorProto = getProto(getProto(e)); - INTRINSICS["%Error.prototype%"] = errorProto; - } - } - var errorProto; - var doEval = function doEval2(name) { - var value; - if (name === "%AsyncFunction%") { - value = getEvalledConstructor("async function () {}"); - } else if (name === "%GeneratorFunction%") { - value = getEvalledConstructor("function* () {}"); - } else if (name === "%AsyncGeneratorFunction%") { - value = getEvalledConstructor("async function* () {}"); - } else if (name === "%AsyncGenerator%") { - var fn = doEval2("%AsyncGeneratorFunction%"); - if (fn) { - value = fn.prototype; - } - } else if (name === "%AsyncIteratorPrototype%") { - var gen = doEval2("%AsyncGenerator%"); - if (gen && getProto) { - value = getProto(gen.prototype); - } - } - INTRINSICS[name] = value; - return value; - }; - var LEGACY_ALIASES = { - __proto__: null, - "%ArrayBufferPrototype%": ["ArrayBuffer", "prototype"], - "%ArrayPrototype%": ["Array", "prototype"], - "%ArrayProto_entries%": ["Array", "prototype", "entries"], - "%ArrayProto_forEach%": ["Array", "prototype", "forEach"], - "%ArrayProto_keys%": ["Array", "prototype", "keys"], - "%ArrayProto_values%": ["Array", "prototype", "values"], - "%AsyncFunctionPrototype%": ["AsyncFunction", "prototype"], - "%AsyncGenerator%": ["AsyncGeneratorFunction", "prototype"], - "%AsyncGeneratorPrototype%": ["AsyncGeneratorFunction", "prototype", "prototype"], - "%BooleanPrototype%": ["Boolean", "prototype"], - "%DataViewPrototype%": ["DataView", "prototype"], - "%DatePrototype%": ["Date", "prototype"], - "%ErrorPrototype%": ["Error", "prototype"], - "%EvalErrorPrototype%": ["EvalError", "prototype"], - "%Float32ArrayPrototype%": ["Float32Array", "prototype"], - "%Float64ArrayPrototype%": ["Float64Array", "prototype"], - "%FunctionPrototype%": ["Function", "prototype"], - "%Generator%": ["GeneratorFunction", "prototype"], - "%GeneratorPrototype%": ["GeneratorFunction", "prototype", "prototype"], - "%Int8ArrayPrototype%": ["Int8Array", "prototype"], - "%Int16ArrayPrototype%": ["Int16Array", "prototype"], - "%Int32ArrayPrototype%": ["Int32Array", "prototype"], - "%JSONParse%": ["JSON", "parse"], - "%JSONStringify%": ["JSON", "stringify"], - "%MapPrototype%": ["Map", "prototype"], - "%NumberPrototype%": ["Number", "prototype"], - "%ObjectPrototype%": ["Object", "prototype"], - "%ObjProto_toString%": ["Object", "prototype", "toString"], - "%ObjProto_valueOf%": ["Object", "prototype", "valueOf"], - "%PromisePrototype%": ["Promise", "prototype"], - "%PromiseProto_then%": ["Promise", "prototype", "then"], - "%Promise_all%": ["Promise", "all"], - "%Promise_reject%": ["Promise", "reject"], - "%Promise_resolve%": ["Promise", "resolve"], - "%RangeErrorPrototype%": ["RangeError", "prototype"], - "%ReferenceErrorPrototype%": ["ReferenceError", "prototype"], - "%RegExpPrototype%": ["RegExp", "prototype"], - "%SetPrototype%": ["Set", "prototype"], - "%SharedArrayBufferPrototype%": ["SharedArrayBuffer", "prototype"], - "%StringPrototype%": ["String", "prototype"], - "%SymbolPrototype%": ["Symbol", "prototype"], - "%SyntaxErrorPrototype%": ["SyntaxError", "prototype"], - "%TypedArrayPrototype%": ["TypedArray", "prototype"], - "%TypeErrorPrototype%": ["TypeError", "prototype"], - "%Uint8ArrayPrototype%": ["Uint8Array", "prototype"], - "%Uint8ClampedArrayPrototype%": ["Uint8ClampedArray", "prototype"], - "%Uint16ArrayPrototype%": ["Uint16Array", "prototype"], - "%Uint32ArrayPrototype%": ["Uint32Array", "prototype"], - "%URIErrorPrototype%": ["URIError", "prototype"], - "%WeakMapPrototype%": ["WeakMap", "prototype"], - "%WeakSetPrototype%": ["WeakSet", "prototype"] - }; - var bind = require_function_bind(); - var hasOwn = require_hasown(); - var $concat = bind.call(Function.call, Array.prototype.concat); - var $spliceApply = bind.call(Function.apply, Array.prototype.splice); - var $replace = bind.call(Function.call, String.prototype.replace); - var $strSlice = bind.call(Function.call, String.prototype.slice); - var $exec = bind.call(Function.call, RegExp.prototype.exec); - var rePropName = /[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g; - var reEscapeChar = /\\(\\)?/g; - var stringToPath = function stringToPath2(string) { - var first2 = $strSlice(string, 0, 1); - var last2 = $strSlice(string, -1); - if (first2 === "%" && last2 !== "%") { - throw new $SyntaxError("invalid intrinsic syntax, expected closing `%`"); - } else if (last2 === "%" && first2 !== "%") { - throw new $SyntaxError("invalid intrinsic syntax, expected opening `%`"); - } - var result = []; - $replace(string, rePropName, function(match, number, quote, subString) { - result[result.length] = quote ? $replace(subString, reEscapeChar, "$1") : number || match; - }); - return result; - }; - var getBaseIntrinsic = function getBaseIntrinsic2(name, allowMissing) { - var intrinsicName = name; - var alias; - if (hasOwn(LEGACY_ALIASES, intrinsicName)) { - alias = LEGACY_ALIASES[intrinsicName]; - intrinsicName = "%" + alias[0] + "%"; - } - if (hasOwn(INTRINSICS, intrinsicName)) { - var value = INTRINSICS[intrinsicName]; - if (value === needsEval) { - value = doEval(intrinsicName); - } - if (typeof value === "undefined" && !allowMissing) { - throw new $TypeError("intrinsic " + name + " exists, but is not available. Please file an issue!"); - } - return { - alias, - name: intrinsicName, - value - }; - } - throw new $SyntaxError("intrinsic " + name + " does not exist!"); - }; - module2.exports = function GetIntrinsic(name, allowMissing) { - if (typeof name !== "string" || name.length === 0) { - throw new $TypeError("intrinsic name must be a non-empty string"); - } - if (arguments.length > 1 && typeof allowMissing !== "boolean") { - throw new $TypeError('"allowMissing" argument must be a boolean'); - } - if ($exec(/^%?[^%]*%?$/, name) === null) { - throw new $SyntaxError("`%` may not be present anywhere but at the beginning and end of the intrinsic name"); - } - var parts = stringToPath(name); - var intrinsicBaseName = parts.length > 0 ? parts[0] : ""; - var intrinsic = getBaseIntrinsic("%" + intrinsicBaseName + "%", allowMissing); - var intrinsicRealName = intrinsic.name; - var value = intrinsic.value; - var skipFurtherCaching = false; - var alias = intrinsic.alias; - if (alias) { - intrinsicBaseName = alias[0]; - $spliceApply(parts, $concat([0, 1], alias)); - } - for (var i = 1, isOwn = true; i < parts.length; i += 1) { - var part = parts[i]; - var first2 = $strSlice(part, 0, 1); - var last2 = $strSlice(part, -1); - if ((first2 === '"' || first2 === "'" || first2 === "`" || (last2 === '"' || last2 === "'" || last2 === "`")) && first2 !== last2) { - throw new $SyntaxError("property names with quotes must have matching quotes"); - } - if (part === "constructor" || !isOwn) { - skipFurtherCaching = true; - } - intrinsicBaseName += "." + part; - intrinsicRealName = "%" + intrinsicBaseName + "%"; - if (hasOwn(INTRINSICS, intrinsicRealName)) { - value = INTRINSICS[intrinsicRealName]; - } else if (value != null) { - if (!(part in value)) { - if (!allowMissing) { - throw new $TypeError("base intrinsic for " + name + " exists, but the property is not available."); - } - return void 0; - } - if ($gOPD && i + 1 >= parts.length) { - var desc = $gOPD(value, part); - isOwn = !!desc; - if (isOwn && "get" in desc && !("originalValue" in desc.get)) { - value = desc.get; - } else { - value = value[part]; - } - } else { - isOwn = hasOwn(value, part); - value = value[part]; - } - if (isOwn && !skipFurtherCaching) { - INTRINSICS[intrinsicRealName] = value; - } - } - } - return value; - }; - } -}); - -// node_modules/.pnpm/has-property-descriptors@1.0.1/node_modules/has-property-descriptors/index.js -var require_has_property_descriptors = __commonJS({ - "node_modules/.pnpm/has-property-descriptors@1.0.1/node_modules/has-property-descriptors/index.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - var GetIntrinsic = require_get_intrinsic(); - var $defineProperty = GetIntrinsic("%Object.defineProperty%", true); - var hasPropertyDescriptors = function hasPropertyDescriptors2() { - if ($defineProperty) { - try { - $defineProperty({}, "a", { value: 1 }); - return true; - } catch (e) { - return false; - } - } - return false; - }; - hasPropertyDescriptors.hasArrayLengthDefineBug = function hasArrayLengthDefineBug() { - if (!hasPropertyDescriptors()) { - return null; - } - try { - return $defineProperty([], "length", { value: 1 }).length !== 1; - } catch (e) { - return true; - } - }; - module2.exports = hasPropertyDescriptors; - } -}); - -// node_modules/.pnpm/gopd@1.0.1/node_modules/gopd/index.js -var require_gopd = __commonJS({ - "node_modules/.pnpm/gopd@1.0.1/node_modules/gopd/index.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - var GetIntrinsic = require_get_intrinsic(); - var $gOPD = GetIntrinsic("%Object.getOwnPropertyDescriptor%", true); - if ($gOPD) { - try { - $gOPD([], "length"); - } catch (e) { - $gOPD = null; - } - } - module2.exports = $gOPD; - } -}); - -// node_modules/.pnpm/define-data-property@1.1.2/node_modules/define-data-property/index.js -var require_define_data_property = __commonJS({ - "node_modules/.pnpm/define-data-property@1.1.2/node_modules/define-data-property/index.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - var hasPropertyDescriptors = require_has_property_descriptors()(); - var GetIntrinsic = require_get_intrinsic(); - var $defineProperty = hasPropertyDescriptors && GetIntrinsic("%Object.defineProperty%", true); - if ($defineProperty) { - try { - $defineProperty({}, "a", { value: 1 }); - } catch (e) { - $defineProperty = false; - } - } - var $SyntaxError = require_syntax(); - var $TypeError = require_type(); - var gopd = require_gopd(); - module2.exports = function defineDataProperty(obj, property, value) { - if (!obj || typeof obj !== "object" && typeof obj !== "function") { - throw new $TypeError("`obj` must be an object or a function`"); - } - if (typeof property !== "string" && typeof property !== "symbol") { - throw new $TypeError("`property` must be a string or a symbol`"); - } - if (arguments.length > 3 && typeof arguments[3] !== "boolean" && arguments[3] !== null) { - throw new $TypeError("`nonEnumerable`, if provided, must be a boolean or null"); - } - if (arguments.length > 4 && typeof arguments[4] !== "boolean" && arguments[4] !== null) { - throw new $TypeError("`nonWritable`, if provided, must be a boolean or null"); - } - if (arguments.length > 5 && typeof arguments[5] !== "boolean" && arguments[5] !== null) { - throw new $TypeError("`nonConfigurable`, if provided, must be a boolean or null"); - } - if (arguments.length > 6 && typeof arguments[6] !== "boolean") { - throw new $TypeError("`loose`, if provided, must be a boolean"); - } - var nonEnumerable = arguments.length > 3 ? arguments[3] : null; - var nonWritable = arguments.length > 4 ? arguments[4] : null; - var nonConfigurable = arguments.length > 5 ? arguments[5] : null; - var loose = arguments.length > 6 ? arguments[6] : false; - var desc = !!gopd && gopd(obj, property); - if ($defineProperty) { - $defineProperty(obj, property, { - configurable: nonConfigurable === null && desc ? desc.configurable : !nonConfigurable, - enumerable: nonEnumerable === null && desc ? desc.enumerable : !nonEnumerable, - value, - writable: nonWritable === null && desc ? desc.writable : !nonWritable - }); - } else if (loose || !nonEnumerable && !nonWritable && !nonConfigurable) { - obj[property] = value; - } else { - throw new $SyntaxError("This environment does not support defining a property as non-configurable, non-writable, or non-enumerable."); - } - }; - } -}); - -// node_modules/.pnpm/define-properties@1.2.1/node_modules/define-properties/index.js -var require_define_properties = __commonJS({ - "node_modules/.pnpm/define-properties@1.2.1/node_modules/define-properties/index.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - var keys = require_object_keys(); - var hasSymbols = typeof Symbol === "function" && typeof Symbol("foo") === "symbol"; - var toStr = Object.prototype.toString; - var concat = Array.prototype.concat; - var defineDataProperty = require_define_data_property(); - var isFunction2 = function(fn) { - return typeof fn === "function" && toStr.call(fn) === "[object Function]"; - }; - var supportsDescriptors = require_has_property_descriptors()(); - var defineProperty = function(object, name, value, predicate) { - if (name in object) { - if (predicate === true) { - if (object[name] === value) { - return; - } - } else if (!isFunction2(predicate) || !predicate()) { - return; - } - } - if (supportsDescriptors) { - defineDataProperty(object, name, value, true); - } else { - defineDataProperty(object, name, value); - } - }; - var defineProperties = function(object, map) { - var predicates = arguments.length > 2 ? arguments[2] : {}; - var props = keys(map); - if (hasSymbols) { - props = concat.call(props, Object.getOwnPropertySymbols(map)); - } - for (var i = 0; i < props.length; i += 1) { - defineProperty(object, props[i], map[props[i]], predicates[props[i]]); - } - }; - defineProperties.supportsDescriptors = !!supportsDescriptors; - module2.exports = defineProperties; - } -}); - -// node_modules/.pnpm/set-function-length@1.2.1/node_modules/set-function-length/index.js -var require_set_function_length = __commonJS({ - "node_modules/.pnpm/set-function-length@1.2.1/node_modules/set-function-length/index.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - var GetIntrinsic = require_get_intrinsic(); - var define2 = require_define_data_property(); - var hasDescriptors = require_has_property_descriptors()(); - var gOPD = require_gopd(); - var $TypeError = require_type(); - var $floor = GetIntrinsic("%Math.floor%"); - module2.exports = function setFunctionLength(fn, length) { - if (typeof fn !== "function") { - throw new $TypeError("`fn` is not a function"); - } - if (typeof length !== "number" || length < 0 || length > 4294967295 || $floor(length) !== length) { - throw new $TypeError("`length` must be a positive 32-bit integer"); - } - var loose = arguments.length > 2 && !!arguments[2]; - var functionLengthIsConfigurable = true; - var functionLengthIsWritable = true; - if ("length" in fn && gOPD) { - var desc = gOPD(fn, "length"); - if (desc && !desc.configurable) { - functionLengthIsConfigurable = false; - } - if (desc && !desc.writable) { - functionLengthIsWritable = false; - } - } - if (functionLengthIsConfigurable || functionLengthIsWritable || !loose) { - if (hasDescriptors) { - define2( - /** @type {Parameters[0]} */ - fn, - "length", - length, - true, - true - ); - } else { - define2( - /** @type {Parameters[0]} */ - fn, - "length", - length - ); - } - } - return fn; - }; - } -}); - -// node_modules/.pnpm/call-bind@1.0.6/node_modules/call-bind/index.js -var require_call_bind = __commonJS({ - "node_modules/.pnpm/call-bind@1.0.6/node_modules/call-bind/index.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - var bind = require_function_bind(); - var GetIntrinsic = require_get_intrinsic(); - var setFunctionLength = require_set_function_length(); - var $TypeError = require_type(); - var $apply = GetIntrinsic("%Function.prototype.apply%"); - var $call = GetIntrinsic("%Function.prototype.call%"); - var $reflectApply = GetIntrinsic("%Reflect.apply%", true) || bind.call($call, $apply); - var $defineProperty = GetIntrinsic("%Object.defineProperty%", true); - var $max = GetIntrinsic("%Math.max%"); - if ($defineProperty) { - try { - $defineProperty({}, "a", { value: 1 }); - } catch (e) { - $defineProperty = null; - } - } - module2.exports = function callBind(originalFunction) { - if (typeof originalFunction !== "function") { - throw new $TypeError("a function is required"); - } - var func = $reflectApply(bind, $call, arguments); - return setFunctionLength( - func, - 1 + $max(0, originalFunction.length - (arguments.length - 1)), - true - ); - }; - var applyBind = function applyBind2() { - return $reflectApply(bind, $apply, arguments); - }; - if ($defineProperty) { - $defineProperty(module2.exports, "apply", { value: applyBind }); - } else { - module2.exports.apply = applyBind; - } - } -}); - -// node_modules/.pnpm/call-bind@1.0.6/node_modules/call-bind/callBound.js -var require_callBound = __commonJS({ - "node_modules/.pnpm/call-bind@1.0.6/node_modules/call-bind/callBound.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - var GetIntrinsic = require_get_intrinsic(); - var callBind = require_call_bind(); - var $indexOf = callBind(GetIntrinsic("String.prototype.indexOf")); - module2.exports = function callBoundIntrinsic(name, allowMissing) { - var intrinsic = GetIntrinsic(name, !!allowMissing); - if (typeof intrinsic === "function" && $indexOf(name, ".prototype.") > -1) { - return callBind(intrinsic); - } - return intrinsic; - }; - } -}); - -// node_modules/.pnpm/object.assign@4.1.5/node_modules/object.assign/implementation.js -var require_implementation3 = __commonJS({ - "node_modules/.pnpm/object.assign@4.1.5/node_modules/object.assign/implementation.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - var objectKeys = require_object_keys(); - var hasSymbols = require_shams()(); - var callBound = require_callBound(); - var toObject = Object; - var $push = callBound("Array.prototype.push"); - var $propIsEnumerable = callBound("Object.prototype.propertyIsEnumerable"); - var originalGetSymbols = hasSymbols ? Object.getOwnPropertySymbols : null; - module2.exports = function assign2(target, source1) { - if (target == null) { - throw new TypeError("target must be an object"); - } - var to = toObject(target); - if (arguments.length === 1) { - return to; - } - for (var s = 1; s < arguments.length; ++s) { - var from = toObject(arguments[s]); - var keys = objectKeys(from); - var getSymbols = hasSymbols && (Object.getOwnPropertySymbols || originalGetSymbols); - if (getSymbols) { - var syms = getSymbols(from); - for (var j = 0; j < syms.length; ++j) { - var key2 = syms[j]; - if ($propIsEnumerable(from, key2)) { - $push(keys, key2); - } - } - } - for (var i = 0; i < keys.length; ++i) { - var nextKey = keys[i]; - if ($propIsEnumerable(from, nextKey)) { - var propValue = from[nextKey]; - to[nextKey] = propValue; - } - } - } - return to; - }; - } -}); - -// node_modules/.pnpm/object.assign@4.1.5/node_modules/object.assign/polyfill.js -var require_polyfill = __commonJS({ - "node_modules/.pnpm/object.assign@4.1.5/node_modules/object.assign/polyfill.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - var implementation = require_implementation3(); - var lacksProperEnumerationOrder = function() { - if (!Object.assign) { - return false; - } - var str = "abcdefghijklmnopqrst"; - var letters = str.split(""); - var map = {}; - for (var i = 0; i < letters.length; ++i) { - map[letters[i]] = letters[i]; - } - var obj = Object.assign({}, map); - var actual = ""; - for (var k in obj) { - actual += k; - } - return str !== actual; - }; - var assignHasPendingExceptions = function() { - if (!Object.assign || !Object.preventExtensions) { - return false; - } - var thrower = Object.preventExtensions({ 1: 2 }); - try { - Object.assign(thrower, "xy"); - } catch (e) { - return thrower[1] === "y"; - } - return false; - }; - module2.exports = function getPolyfill() { - if (!Object.assign) { - return implementation; - } - if (lacksProperEnumerationOrder()) { - return implementation; - } - if (assignHasPendingExceptions()) { - return implementation; - } - return Object.assign; - }; - } -}); - -// node_modules/.pnpm/object.assign@4.1.5/node_modules/object.assign/shim.js -var require_shim = __commonJS({ - "node_modules/.pnpm/object.assign@4.1.5/node_modules/object.assign/shim.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - var define2 = require_define_properties(); - var getPolyfill = require_polyfill(); - module2.exports = function shimAssign() { - var polyfill = getPolyfill(); - define2( - Object, - { assign: polyfill }, - { assign: function() { - return Object.assign !== polyfill; - } } - ); - return polyfill; - }; - } -}); - -// node_modules/.pnpm/object.assign@4.1.5/node_modules/object.assign/index.js -var require_object = __commonJS({ - "node_modules/.pnpm/object.assign@4.1.5/node_modules/object.assign/index.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - var defineProperties = require_define_properties(); - var callBind = require_call_bind(); - var implementation = require_implementation3(); - var getPolyfill = require_polyfill(); - var shim = require_shim(); - var polyfill = callBind.apply(getPolyfill()); - var bound = function assign2(target, source1) { - return polyfill(Object, arguments); - }; - defineProperties(bound, { - getPolyfill, - implementation, - shim - }); - module2.exports = bound; - } -}); - -// node_modules/.pnpm/functions-have-names@1.2.3/node_modules/functions-have-names/index.js -var require_functions_have_names = __commonJS({ - "node_modules/.pnpm/functions-have-names@1.2.3/node_modules/functions-have-names/index.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - var functionsHaveNames = function functionsHaveNames2() { - return typeof function f() { - }.name === "string"; - }; - var gOPD = Object.getOwnPropertyDescriptor; - if (gOPD) { - try { - gOPD([], "length"); - } catch (e) { - gOPD = null; - } - } - functionsHaveNames.functionsHaveConfigurableNames = function functionsHaveConfigurableNames() { - if (!functionsHaveNames() || !gOPD) { - return false; - } - var desc = gOPD(function() { - }, "name"); - return !!desc && !!desc.configurable; - }; - var $bind = Function.prototype.bind; - functionsHaveNames.boundFunctionsHaveNames = function boundFunctionsHaveNames() { - return functionsHaveNames() && typeof $bind === "function" && function f() { - }.bind().name !== ""; - }; - module2.exports = functionsHaveNames; - } -}); - -// node_modules/.pnpm/set-function-name@2.0.1/node_modules/set-function-name/index.js -var require_set_function_name = __commonJS({ - "node_modules/.pnpm/set-function-name@2.0.1/node_modules/set-function-name/index.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - var define2 = require_define_data_property(); - var hasDescriptors = require_has_property_descriptors()(); - var functionsHaveConfigurableNames = require_functions_have_names().functionsHaveConfigurableNames(); - var $TypeError = TypeError; - module2.exports = function setFunctionName(fn, name) { - if (typeof fn !== "function") { - throw new $TypeError("`fn` is not a function"); - } - var loose = arguments.length > 2 && !!arguments[2]; - if (!loose || functionsHaveConfigurableNames) { - if (hasDescriptors) { - define2(fn, "name", name, true, true); - } else { - define2(fn, "name", name); - } - } - return fn; - }; - } -}); - -// node_modules/.pnpm/regexp.prototype.flags@1.5.2/node_modules/regexp.prototype.flags/implementation.js -var require_implementation4 = __commonJS({ - "node_modules/.pnpm/regexp.prototype.flags@1.5.2/node_modules/regexp.prototype.flags/implementation.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - var setFunctionName = require_set_function_name(); - var $TypeError = require_type(); - var $Object = Object; - module2.exports = setFunctionName(function flags() { - if (this == null || this !== $Object(this)) { - throw new $TypeError("RegExp.prototype.flags getter called on non-object"); - } - var result = ""; - if (this.hasIndices) { - result += "d"; - } - if (this.global) { - result += "g"; - } - if (this.ignoreCase) { - result += "i"; - } - if (this.multiline) { - result += "m"; - } - if (this.dotAll) { - result += "s"; - } - if (this.unicode) { - result += "u"; - } - if (this.unicodeSets) { - result += "v"; - } - if (this.sticky) { - result += "y"; - } - return result; - }, "get flags", true); - } -}); - -// node_modules/.pnpm/regexp.prototype.flags@1.5.2/node_modules/regexp.prototype.flags/polyfill.js -var require_polyfill2 = __commonJS({ - "node_modules/.pnpm/regexp.prototype.flags@1.5.2/node_modules/regexp.prototype.flags/polyfill.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - var implementation = require_implementation4(); - var supportsDescriptors = require_define_properties().supportsDescriptors; - var $gOPD = Object.getOwnPropertyDescriptor; - module2.exports = function getPolyfill() { - if (supportsDescriptors && /a/mig.flags === "gim") { - var descriptor = $gOPD(RegExp.prototype, "flags"); - if (descriptor && typeof descriptor.get === "function" && typeof RegExp.prototype.dotAll === "boolean" && typeof RegExp.prototype.hasIndices === "boolean") { - var calls = ""; - var o = {}; - Object.defineProperty(o, "hasIndices", { - get: function() { - calls += "d"; - } - }); - Object.defineProperty(o, "sticky", { - get: function() { - calls += "y"; - } - }); - if (calls === "dy") { - return descriptor.get; - } - } - } - return implementation; - }; - } -}); - -// node_modules/.pnpm/regexp.prototype.flags@1.5.2/node_modules/regexp.prototype.flags/shim.js -var require_shim2 = __commonJS({ - "node_modules/.pnpm/regexp.prototype.flags@1.5.2/node_modules/regexp.prototype.flags/shim.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - var supportsDescriptors = require_define_properties().supportsDescriptors; - var getPolyfill = require_polyfill2(); - var gOPD = Object.getOwnPropertyDescriptor; - var defineProperty = Object.defineProperty; - var TypeErr = TypeError; - var getProto = Object.getPrototypeOf; - var regex2 = /a/; - module2.exports = function shimFlags() { - if (!supportsDescriptors || !getProto) { - throw new TypeErr("RegExp.prototype.flags requires a true ES5 environment that supports property descriptors"); - } - var polyfill = getPolyfill(); - var proto = getProto(regex2); - var descriptor = gOPD(proto, "flags"); - if (!descriptor || descriptor.get !== polyfill) { - defineProperty(proto, "flags", { - configurable: true, - enumerable: false, - get: polyfill - }); - } - return polyfill; - }; - } -}); - -// node_modules/.pnpm/regexp.prototype.flags@1.5.2/node_modules/regexp.prototype.flags/index.js -var require_regexp_prototype = __commonJS({ - "node_modules/.pnpm/regexp.prototype.flags@1.5.2/node_modules/regexp.prototype.flags/index.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - var define2 = require_define_properties(); - var callBind = require_call_bind(); - var implementation = require_implementation4(); - var getPolyfill = require_polyfill2(); - var shim = require_shim2(); - var flagsBound = callBind(getPolyfill()); - define2(flagsBound, { - getPolyfill, - implementation, - shim - }); - module2.exports = flagsBound; - } -}); - -// node_modules/.pnpm/has-tostringtag@1.0.2/node_modules/has-tostringtag/shams.js -var require_shams2 = __commonJS({ - "node_modules/.pnpm/has-tostringtag@1.0.2/node_modules/has-tostringtag/shams.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - var hasSymbols = require_shams(); - module2.exports = function hasToStringTagShams() { - return hasSymbols() && !!Symbol.toStringTag; - }; - } -}); - -// node_modules/.pnpm/is-arguments@1.1.1/node_modules/is-arguments/index.js -var require_is_arguments = __commonJS({ - "node_modules/.pnpm/is-arguments@1.1.1/node_modules/is-arguments/index.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - var hasToStringTag = require_shams2()(); - var callBound = require_callBound(); - var $toString = callBound("Object.prototype.toString"); - var isStandardArguments = function isArguments(value) { - if (hasToStringTag && value && typeof value === "object" && Symbol.toStringTag in value) { - return false; - } - return $toString(value) === "[object Arguments]"; - }; - var isLegacyArguments = function isArguments(value) { - if (isStandardArguments(value)) { - return true; - } - return value !== null && typeof value === "object" && typeof value.length === "number" && value.length >= 0 && $toString(value) !== "[object Array]" && $toString(value.callee) === "[object Function]"; - }; - var supportsStandardArguments = function() { - return isStandardArguments(arguments); - }(); - isStandardArguments.isLegacyArguments = isLegacyArguments; - module2.exports = supportsStandardArguments ? isStandardArguments : isLegacyArguments; - } -}); - -// (disabled):node_modules/.pnpm/object-inspect@1.13.1/node_modules/object-inspect/util.inspect -var require_util = __commonJS({ - "(disabled):node_modules/.pnpm/object-inspect@1.13.1/node_modules/object-inspect/util.inspect"() { - init_polyfill_buffer(); - } -}); - -// node_modules/.pnpm/object-inspect@1.13.1/node_modules/object-inspect/index.js -var require_object_inspect = __commonJS({ - "node_modules/.pnpm/object-inspect@1.13.1/node_modules/object-inspect/index.js"(exports2, module2) { - init_polyfill_buffer(); - var hasMap = typeof Map === "function" && Map.prototype; - var mapSizeDescriptor = Object.getOwnPropertyDescriptor && hasMap ? Object.getOwnPropertyDescriptor(Map.prototype, "size") : null; - var mapSize = hasMap && mapSizeDescriptor && typeof mapSizeDescriptor.get === "function" ? mapSizeDescriptor.get : null; - var mapForEach = hasMap && Map.prototype.forEach; - var hasSet = typeof Set === "function" && Set.prototype; - var setSizeDescriptor = Object.getOwnPropertyDescriptor && hasSet ? Object.getOwnPropertyDescriptor(Set.prototype, "size") : null; - var setSize = hasSet && setSizeDescriptor && typeof setSizeDescriptor.get === "function" ? setSizeDescriptor.get : null; - var setForEach = hasSet && Set.prototype.forEach; - var hasWeakMap = typeof WeakMap === "function" && WeakMap.prototype; - var weakMapHas = hasWeakMap ? WeakMap.prototype.has : null; - var hasWeakSet = typeof WeakSet === "function" && WeakSet.prototype; - var weakSetHas = hasWeakSet ? WeakSet.prototype.has : null; - var hasWeakRef = typeof WeakRef === "function" && WeakRef.prototype; - var weakRefDeref = hasWeakRef ? WeakRef.prototype.deref : null; - var booleanValueOf = Boolean.prototype.valueOf; - var objectToString2 = Object.prototype.toString; - var functionToString = Function.prototype.toString; - var $match = String.prototype.match; - var $slice = String.prototype.slice; - var $replace = String.prototype.replace; - var $toUpperCase = String.prototype.toUpperCase; - var $toLowerCase = String.prototype.toLowerCase; - var $test = RegExp.prototype.test; - var $concat = Array.prototype.concat; - var $join = Array.prototype.join; - var $arrSlice = Array.prototype.slice; - var $floor = Math.floor; - var bigIntValueOf = typeof BigInt === "function" ? BigInt.prototype.valueOf : null; - var gOPS = Object.getOwnPropertySymbols; - var symToString = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? Symbol.prototype.toString : null; - var hasShammedSymbols = typeof Symbol === "function" && typeof Symbol.iterator === "object"; - var toStringTag = typeof Symbol === "function" && Symbol.toStringTag && (typeof Symbol.toStringTag === hasShammedSymbols ? "object" : "symbol") ? Symbol.toStringTag : null; - var isEnumerable = Object.prototype.propertyIsEnumerable; - var gPO = (typeof Reflect === "function" ? Reflect.getPrototypeOf : Object.getPrototypeOf) || ([].__proto__ === Array.prototype ? function(O) { - return O.__proto__; - } : null); - function addNumericSeparator(num2, str) { - if (num2 === Infinity || num2 === -Infinity || num2 !== num2 || num2 && num2 > -1e3 && num2 < 1e3 || $test.call(/e/, str)) { - return str; - } - var sepRegex = /[0-9](?=(?:[0-9]{3})+(?![0-9]))/g; - if (typeof num2 === "number") { - var int = num2 < 0 ? -$floor(-num2) : $floor(num2); - if (int !== num2) { - var intStr = String(int); - var dec = $slice.call(str, intStr.length + 1); - return $replace.call(intStr, sepRegex, "$&_") + "." + $replace.call($replace.call(dec, /([0-9]{3})/g, "$&_"), /_$/, ""); - } - } - return $replace.call(str, sepRegex, "$&_"); - } - var utilInspect = require_util(); - var inspectCustom = utilInspect.custom; - var inspectSymbol = isSymbol(inspectCustom) ? inspectCustom : null; - module2.exports = function inspect_(obj, options, depth, seen) { - var opts = options || {}; - if (has(opts, "quoteStyle") && (opts.quoteStyle !== "single" && opts.quoteStyle !== "double")) { - throw new TypeError('option "quoteStyle" must be "single" or "double"'); - } - if (has(opts, "maxStringLength") && (typeof opts.maxStringLength === "number" ? opts.maxStringLength < 0 && opts.maxStringLength !== Infinity : opts.maxStringLength !== null)) { - throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`'); - } - var customInspect = has(opts, "customInspect") ? opts.customInspect : true; - if (typeof customInspect !== "boolean" && customInspect !== "symbol") { - throw new TypeError("option \"customInspect\", if provided, must be `true`, `false`, or `'symbol'`"); - } - if (has(opts, "indent") && opts.indent !== null && opts.indent !== " " && !(parseInt(opts.indent, 10) === opts.indent && opts.indent > 0)) { - throw new TypeError('option "indent" must be "\\t", an integer > 0, or `null`'); - } - if (has(opts, "numericSeparator") && typeof opts.numericSeparator !== "boolean") { - throw new TypeError('option "numericSeparator", if provided, must be `true` or `false`'); - } - var numericSeparator = opts.numericSeparator; - if (typeof obj === "undefined") { - return "undefined"; - } - if (obj === null) { - return "null"; - } - if (typeof obj === "boolean") { - return obj ? "true" : "false"; - } - if (typeof obj === "string") { - return inspectString(obj, opts); - } - if (typeof obj === "number") { - if (obj === 0) { - return Infinity / obj > 0 ? "0" : "-0"; - } - var str = String(obj); - return numericSeparator ? addNumericSeparator(obj, str) : str; - } - if (typeof obj === "bigint") { - var bigIntStr = String(obj) + "n"; - return numericSeparator ? addNumericSeparator(obj, bigIntStr) : bigIntStr; - } - var maxDepth = typeof opts.depth === "undefined" ? 5 : opts.depth; - if (typeof depth === "undefined") { - depth = 0; - } - if (depth >= maxDepth && maxDepth > 0 && typeof obj === "object") { - return isArray(obj) ? "[Array]" : "[Object]"; - } - var indent2 = getIndent(opts, depth); - if (typeof seen === "undefined") { - seen = []; - } else if (indexOf(seen, obj) >= 0) { - return "[Circular]"; - } - function inspect(value, from, noIndent) { - if (from) { - seen = $arrSlice.call(seen); - seen.push(from); - } - if (noIndent) { - var newOpts = { - depth: opts.depth - }; - if (has(opts, "quoteStyle")) { - newOpts.quoteStyle = opts.quoteStyle; - } - return inspect_(value, newOpts, depth + 1, seen); - } - return inspect_(value, opts, depth + 1, seen); - } - if (typeof obj === "function" && !isRegExp(obj)) { - var name = nameOf(obj); - var keys = arrObjKeys(obj, inspect); - return "[Function" + (name ? ": " + name : " (anonymous)") + "]" + (keys.length > 0 ? " { " + $join.call(keys, ", ") + " }" : ""); - } - if (isSymbol(obj)) { - var symString = hasShammedSymbols ? $replace.call(String(obj), /^(Symbol\(.*\))_[^)]*$/, "$1") : symToString.call(obj); - return typeof obj === "object" && !hasShammedSymbols ? markBoxed(symString) : symString; - } - if (isElement(obj)) { - var s = "<" + $toLowerCase.call(String(obj.nodeName)); - var attrs = obj.attributes || []; - for (var i = 0; i < attrs.length; i++) { - s += " " + attrs[i].name + "=" + wrapQuotes(quote(attrs[i].value), "double", opts); - } - s += ">"; - if (obj.childNodes && obj.childNodes.length) { - s += "..."; - } - s += ""; - return s; - } - if (isArray(obj)) { - if (obj.length === 0) { - return "[]"; - } - var xs = arrObjKeys(obj, inspect); - if (indent2 && !singleLineValues(xs)) { - return "[" + indentedJoin(xs, indent2) + "]"; - } - return "[ " + $join.call(xs, ", ") + " ]"; - } - if (isError(obj)) { - var parts = arrObjKeys(obj, inspect); - if (!("cause" in Error.prototype) && "cause" in obj && !isEnumerable.call(obj, "cause")) { - return "{ [" + String(obj) + "] " + $join.call($concat.call("[cause]: " + inspect(obj.cause), parts), ", ") + " }"; - } - if (parts.length === 0) { - return "[" + String(obj) + "]"; - } - return "{ [" + String(obj) + "] " + $join.call(parts, ", ") + " }"; - } - if (typeof obj === "object" && customInspect) { - if (inspectSymbol && typeof obj[inspectSymbol] === "function" && utilInspect) { - return utilInspect(obj, { depth: maxDepth - depth }); - } else if (customInspect !== "symbol" && typeof obj.inspect === "function") { - return obj.inspect(); - } - } - if (isMap(obj)) { - var mapParts = []; - if (mapForEach) { - mapForEach.call(obj, function(value, key2) { - mapParts.push(inspect(key2, obj, true) + " => " + inspect(value, obj)); - }); - } - return collectionOf("Map", mapSize.call(obj), mapParts, indent2); - } - if (isSet(obj)) { - var setParts = []; - if (setForEach) { - setForEach.call(obj, function(value) { - setParts.push(inspect(value, obj)); - }); - } - return collectionOf("Set", setSize.call(obj), setParts, indent2); - } - if (isWeakMap(obj)) { - return weakCollectionOf("WeakMap"); - } - if (isWeakSet(obj)) { - return weakCollectionOf("WeakSet"); - } - if (isWeakRef(obj)) { - return weakCollectionOf("WeakRef"); - } - if (isNumber(obj)) { - return markBoxed(inspect(Number(obj))); - } - if (isBigInt(obj)) { - return markBoxed(inspect(bigIntValueOf.call(obj))); - } - if (isBoolean(obj)) { - return markBoxed(booleanValueOf.call(obj)); - } - if (isString(obj)) { - return markBoxed(inspect(String(obj))); - } - if (typeof window !== "undefined" && obj === window) { - return "{ [object Window] }"; - } - if (obj === global) { - return "{ [object globalThis] }"; - } - if (!isDate(obj) && !isRegExp(obj)) { - var ys = arrObjKeys(obj, inspect); - var isPlainObject = gPO ? gPO(obj) === Object.prototype : obj instanceof Object || obj.constructor === Object; - var protoTag = obj instanceof Object ? "" : "null prototype"; - var stringTag = !isPlainObject && toStringTag && Object(obj) === obj && toStringTag in obj ? $slice.call(toStr(obj), 8, -1) : protoTag ? "Object" : ""; - var constructorTag = isPlainObject || typeof obj.constructor !== "function" ? "" : obj.constructor.name ? obj.constructor.name + " " : ""; - var tag2 = constructorTag + (stringTag || protoTag ? "[" + $join.call($concat.call([], stringTag || [], protoTag || []), ": ") + "] " : ""); - if (ys.length === 0) { - return tag2 + "{}"; - } - if (indent2) { - return tag2 + "{" + indentedJoin(ys, indent2) + "}"; - } - return tag2 + "{ " + $join.call(ys, ", ") + " }"; - } - return String(obj); - }; - function wrapQuotes(s, defaultStyle, opts) { - var quoteChar = (opts.quoteStyle || defaultStyle) === "double" ? '"' : "'"; - return quoteChar + s + quoteChar; - } - function quote(s) { - return $replace.call(String(s), /"/g, """); - } - function isArray(obj) { - return toStr(obj) === "[object Array]" && (!toStringTag || !(typeof obj === "object" && toStringTag in obj)); - } - function isDate(obj) { - return toStr(obj) === "[object Date]" && (!toStringTag || !(typeof obj === "object" && toStringTag in obj)); - } - function isRegExp(obj) { - return toStr(obj) === "[object RegExp]" && (!toStringTag || !(typeof obj === "object" && toStringTag in obj)); - } - function isError(obj) { - return toStr(obj) === "[object Error]" && (!toStringTag || !(typeof obj === "object" && toStringTag in obj)); - } - function isString(obj) { - return toStr(obj) === "[object String]" && (!toStringTag || !(typeof obj === "object" && toStringTag in obj)); - } - function isNumber(obj) { - return toStr(obj) === "[object Number]" && (!toStringTag || !(typeof obj === "object" && toStringTag in obj)); - } - function isBoolean(obj) { - return toStr(obj) === "[object Boolean]" && (!toStringTag || !(typeof obj === "object" && toStringTag in obj)); - } - function isSymbol(obj) { - if (hasShammedSymbols) { - return obj && typeof obj === "object" && obj instanceof Symbol; - } - if (typeof obj === "symbol") { - return true; - } - if (!obj || typeof obj !== "object" || !symToString) { - return false; - } - try { - symToString.call(obj); - return true; - } catch (e) { - } - return false; - } - function isBigInt(obj) { - if (!obj || typeof obj !== "object" || !bigIntValueOf) { - return false; - } - try { - bigIntValueOf.call(obj); - return true; - } catch (e) { - } - return false; - } - var hasOwn = Object.prototype.hasOwnProperty || function(key2) { - return key2 in this; - }; - function has(obj, key2) { - return hasOwn.call(obj, key2); - } - function toStr(obj) { - return objectToString2.call(obj); - } - function nameOf(f) { - if (f.name) { - return f.name; - } - var m = $match.call(functionToString.call(f), /^function\s*([\w$]+)/); - if (m) { - return m[1]; - } - return null; - } - function indexOf(xs, x) { - if (xs.indexOf) { - return xs.indexOf(x); - } - for (var i = 0, l = xs.length; i < l; i++) { - if (xs[i] === x) { - return i; - } - } - return -1; - } - function isMap(x) { - if (!mapSize || !x || typeof x !== "object") { - return false; - } - try { - mapSize.call(x); - try { - setSize.call(x); - } catch (s) { - return true; - } - return x instanceof Map; - } catch (e) { - } - return false; - } - function isWeakMap(x) { - if (!weakMapHas || !x || typeof x !== "object") { - return false; - } - try { - weakMapHas.call(x, weakMapHas); - try { - weakSetHas.call(x, weakSetHas); - } catch (s) { - return true; - } - return x instanceof WeakMap; - } catch (e) { - } - return false; - } - function isWeakRef(x) { - if (!weakRefDeref || !x || typeof x !== "object") { - return false; - } - try { - weakRefDeref.call(x); - return true; - } catch (e) { - } - return false; - } - function isSet(x) { - if (!setSize || !x || typeof x !== "object") { - return false; - } - try { - setSize.call(x); - try { - mapSize.call(x); - } catch (m) { - return true; - } - return x instanceof Set; - } catch (e) { - } - return false; - } - function isWeakSet(x) { - if (!weakSetHas || !x || typeof x !== "object") { - return false; - } - try { - weakSetHas.call(x, weakSetHas); - try { - weakMapHas.call(x, weakMapHas); - } catch (s) { - return true; - } - return x instanceof WeakSet; - } catch (e) { - } - return false; - } - function isElement(x) { - if (!x || typeof x !== "object") { - return false; - } - if (typeof HTMLElement !== "undefined" && x instanceof HTMLElement) { - return true; - } - return typeof x.nodeName === "string" && typeof x.getAttribute === "function"; - } - function inspectString(str, opts) { - if (str.length > opts.maxStringLength) { - var remaining = str.length - opts.maxStringLength; - var trailer = "... " + remaining + " more character" + (remaining > 1 ? "s" : ""); - return inspectString($slice.call(str, 0, opts.maxStringLength), opts) + trailer; - } - var s = $replace.call($replace.call(str, /(['\\])/g, "\\$1"), /[\x00-\x1f]/g, lowbyte); - return wrapQuotes(s, "single", opts); - } - function lowbyte(c) { - var n = c.charCodeAt(0); - var x = { - 8: "b", - 9: "t", - 10: "n", - 12: "f", - 13: "r" - }[n]; - if (x) { - return "\\" + x; - } - return "\\x" + (n < 16 ? "0" : "") + $toUpperCase.call(n.toString(16)); - } - function markBoxed(str) { - return "Object(" + str + ")"; - } - function weakCollectionOf(type) { - return type + " { ? }"; - } - function collectionOf(type, size, entries, indent2) { - var joinedEntries = indent2 ? indentedJoin(entries, indent2) : $join.call(entries, ", "); - return type + " (" + size + ") {" + joinedEntries + "}"; - } - function singleLineValues(xs) { - for (var i = 0; i < xs.length; i++) { - if (indexOf(xs[i], "\n") >= 0) { - return false; - } - } - return true; - } - function getIndent(opts, depth) { - var baseIndent; - if (opts.indent === " ") { - baseIndent = " "; - } else if (typeof opts.indent === "number" && opts.indent > 0) { - baseIndent = $join.call(Array(opts.indent + 1), " "); - } else { - return null; - } - return { - base: baseIndent, - prev: $join.call(Array(depth + 1), baseIndent) - }; - } - function indentedJoin(xs, indent2) { - if (xs.length === 0) { - return ""; - } - var lineJoiner = "\n" + indent2.prev + indent2.base; - return lineJoiner + $join.call(xs, "," + lineJoiner) + "\n" + indent2.prev; - } - function arrObjKeys(obj, inspect) { - var isArr = isArray(obj); - var xs = []; - if (isArr) { - xs.length = obj.length; - for (var i = 0; i < obj.length; i++) { - xs[i] = has(obj, i) ? inspect(obj[i], obj) : ""; - } - } - var syms = typeof gOPS === "function" ? gOPS(obj) : []; - var symMap; - if (hasShammedSymbols) { - symMap = {}; - for (var k = 0; k < syms.length; k++) { - symMap["$" + syms[k]] = syms[k]; - } - } - for (var key2 in obj) { - if (!has(obj, key2)) { - continue; - } - if (isArr && String(Number(key2)) === key2 && key2 < obj.length) { - continue; - } - if (hasShammedSymbols && symMap["$" + key2] instanceof Symbol) { - continue; - } else if ($test.call(/[^\w$]/, key2)) { - xs.push(inspect(key2, obj) + ": " + inspect(obj[key2], obj)); - } else { - xs.push(key2 + ": " + inspect(obj[key2], obj)); - } - } - if (typeof gOPS === "function") { - for (var j = 0; j < syms.length; j++) { - if (isEnumerable.call(obj, syms[j])) { - xs.push("[" + inspect(syms[j]) + "]: " + inspect(obj[syms[j]], obj)); - } - } - } - return xs; - } - } -}); - -// node_modules/.pnpm/side-channel@1.0.5/node_modules/side-channel/index.js -var require_side_channel = __commonJS({ - "node_modules/.pnpm/side-channel@1.0.5/node_modules/side-channel/index.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - var GetIntrinsic = require_get_intrinsic(); - var callBound = require_callBound(); - var inspect = require_object_inspect(); - var $TypeError = require_type(); - var $WeakMap = GetIntrinsic("%WeakMap%", true); - var $Map = GetIntrinsic("%Map%", true); - var $weakMapGet = callBound("WeakMap.prototype.get", true); - var $weakMapSet = callBound("WeakMap.prototype.set", true); - var $weakMapHas = callBound("WeakMap.prototype.has", true); - var $mapGet = callBound("Map.prototype.get", true); - var $mapSet = callBound("Map.prototype.set", true); - var $mapHas = callBound("Map.prototype.has", true); - var listGetNode = function(list, key2) { - for (var prev = list, curr; (curr = prev.next) !== null; prev = curr) { - if (curr.key === key2) { - prev.next = curr.next; - curr.next = list.next; - list.next = curr; - return curr; - } - } - }; - var listGet = function(objects, key2) { - var node = listGetNode(objects, key2); - return node && node.value; - }; - var listSet = function(objects, key2, value) { - var node = listGetNode(objects, key2); - if (node) { - node.value = value; - } else { - objects.next = { - // eslint-disable-line no-param-reassign - key: key2, - next: objects.next, - value - }; - } - }; - var listHas = function(objects, key2) { - return !!listGetNode(objects, key2); - }; - module2.exports = function getSideChannel() { - var $wm; - var $m; - var $o; - var channel = { - assert: function(key2) { - if (!channel.has(key2)) { - throw new $TypeError("Side channel does not contain " + inspect(key2)); - } - }, - get: function(key2) { - if ($WeakMap && key2 && (typeof key2 === "object" || typeof key2 === "function")) { - if ($wm) { - return $weakMapGet($wm, key2); - } - } else if ($Map) { - if ($m) { - return $mapGet($m, key2); - } - } else { - if ($o) { - return listGet($o, key2); - } - } - }, - has: function(key2) { - if ($WeakMap && key2 && (typeof key2 === "object" || typeof key2 === "function")) { - if ($wm) { - return $weakMapHas($wm, key2); - } - } else if ($Map) { - if ($m) { - return $mapHas($m, key2); - } - } else { - if ($o) { - return listHas($o, key2); - } - } - return false; - }, - set: function(key2, value) { - if ($WeakMap && key2 && (typeof key2 === "object" || typeof key2 === "function")) { - if (!$wm) { - $wm = new $WeakMap(); - } - $weakMapSet($wm, key2, value); - } else if ($Map) { - if (!$m) { - $m = new $Map(); - } - $mapSet($m, key2, value); - } else { - if (!$o) { - $o = { key: {}, next: null }; - } - listSet($o, key2, value); - } - } - }; - return channel; - }; - } -}); - -// node_modules/.pnpm/internal-slot@1.0.7/node_modules/internal-slot/index.js -var require_internal_slot = __commonJS({ - "node_modules/.pnpm/internal-slot@1.0.7/node_modules/internal-slot/index.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - var hasOwn = require_hasown(); - var channel = require_side_channel()(); - var $TypeError = require_type(); - var SLOT = { - assert: function(O, slot) { - if (!O || typeof O !== "object" && typeof O !== "function") { - throw new $TypeError("`O` is not an object"); - } - if (typeof slot !== "string") { - throw new $TypeError("`slot` must be a string"); - } - channel.assert(O); - if (!SLOT.has(O, slot)) { - throw new $TypeError("`" + slot + "` is not present on `O`"); - } - }, - get: function(O, slot) { - if (!O || typeof O !== "object" && typeof O !== "function") { - throw new $TypeError("`O` is not an object"); - } - if (typeof slot !== "string") { - throw new $TypeError("`slot` must be a string"); - } - var slots = channel.get(O); - return slots && slots["$" + slot]; - }, - has: function(O, slot) { - if (!O || typeof O !== "object" && typeof O !== "function") { - throw new $TypeError("`O` is not an object"); - } - if (typeof slot !== "string") { - throw new $TypeError("`slot` must be a string"); - } - var slots = channel.get(O); - return !!slots && hasOwn(slots, "$" + slot); - }, - set: function(O, slot, V) { - if (!O || typeof O !== "object" && typeof O !== "function") { - throw new $TypeError("`O` is not an object"); - } - if (typeof slot !== "string") { - throw new $TypeError("`slot` must be a string"); - } - var slots = channel.get(O); - if (!slots) { - slots = {}; - channel.set(O, slots); - } - slots["$" + slot] = V; - } - }; - if (Object.freeze) { - Object.freeze(SLOT); - } - module2.exports = SLOT; - } -}); - -// node_modules/.pnpm/stop-iteration-iterator@1.0.0/node_modules/stop-iteration-iterator/index.js -var require_stop_iteration_iterator = __commonJS({ - "node_modules/.pnpm/stop-iteration-iterator@1.0.0/node_modules/stop-iteration-iterator/index.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - var SLOT = require_internal_slot(); - var $SyntaxError = SyntaxError; - var $StopIteration = typeof StopIteration === "object" ? StopIteration : null; - module2.exports = function getStopIterationIterator(origIterator) { - if (!$StopIteration) { - throw new $SyntaxError("this environment lacks StopIteration"); - } - SLOT.set(origIterator, "[[Done]]", false); - var siIterator = { - next: function next() { - var iterator = SLOT.get(this, "[[Iterator]]"); - var done = SLOT.get(iterator, "[[Done]]"); - try { - return { - done, - value: done ? void 0 : iterator.next() - }; - } catch (e) { - SLOT.set(iterator, "[[Done]]", true); - if (e !== $StopIteration) { - throw e; - } - return { - done: true, - value: void 0 - }; - } - } - }; - SLOT.set(siIterator, "[[Iterator]]", origIterator); - return siIterator; - }; - } -}); - -// node_modules/.pnpm/isarray@2.0.5/node_modules/isarray/index.js -var require_isarray = __commonJS({ - "node_modules/.pnpm/isarray@2.0.5/node_modules/isarray/index.js"(exports2, module2) { - init_polyfill_buffer(); - var toString = {}.toString; - module2.exports = Array.isArray || function(arr) { - return toString.call(arr) == "[object Array]"; - }; - } -}); - -// node_modules/.pnpm/is-string@1.0.7/node_modules/is-string/index.js -var require_is_string = __commonJS({ - "node_modules/.pnpm/is-string@1.0.7/node_modules/is-string/index.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - var strValue = String.prototype.valueOf; - var tryStringObject = function tryStringObject2(value) { - try { - strValue.call(value); - return true; - } catch (e) { - return false; - } - }; - var toStr = Object.prototype.toString; - var strClass = "[object String]"; - var hasToStringTag = require_shams2()(); - module2.exports = function isString(value) { - if (typeof value === "string") { - return true; - } - if (typeof value !== "object") { - return false; - } - return hasToStringTag ? tryStringObject(value) : toStr.call(value) === strClass; - }; - } -}); - -// node_modules/.pnpm/is-map@2.0.2/node_modules/is-map/index.js -var require_is_map = __commonJS({ - "node_modules/.pnpm/is-map@2.0.2/node_modules/is-map/index.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - var $Map = typeof Map === "function" && Map.prototype ? Map : null; - var $Set = typeof Set === "function" && Set.prototype ? Set : null; - var exported; - if (!$Map) { - exported = function isMap(x) { - return false; - }; - } - var $mapHas = $Map ? Map.prototype.has : null; - var $setHas = $Set ? Set.prototype.has : null; - if (!exported && !$mapHas) { - exported = function isMap(x) { - return false; - }; - } - module2.exports = exported || function isMap(x) { - if (!x || typeof x !== "object") { - return false; - } - try { - $mapHas.call(x); - if ($setHas) { - try { - $setHas.call(x); - } catch (e) { - return true; - } - } - return x instanceof $Map; - } catch (e) { - } - return false; - }; - } -}); - -// node_modules/.pnpm/is-set@2.0.2/node_modules/is-set/index.js -var require_is_set = __commonJS({ - "node_modules/.pnpm/is-set@2.0.2/node_modules/is-set/index.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - var $Map = typeof Map === "function" && Map.prototype ? Map : null; - var $Set = typeof Set === "function" && Set.prototype ? Set : null; - var exported; - if (!$Set) { - exported = function isSet(x) { - return false; - }; - } - var $mapHas = $Map ? Map.prototype.has : null; - var $setHas = $Set ? Set.prototype.has : null; - if (!exported && !$setHas) { - exported = function isSet(x) { - return false; - }; - } - module2.exports = exported || function isSet(x) { - if (!x || typeof x !== "object") { - return false; - } - try { - $setHas.call(x); - if ($mapHas) { - try { - $mapHas.call(x); - } catch (e) { - return true; - } - } - return x instanceof $Set; - } catch (e) { - } - return false; - }; - } -}); - -// node_modules/.pnpm/es-get-iterator@1.1.3/node_modules/es-get-iterator/index.js -var require_es_get_iterator = __commonJS({ - "node_modules/.pnpm/es-get-iterator@1.1.3/node_modules/es-get-iterator/index.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - var isArguments = require_is_arguments(); - var getStopIterationIterator = require_stop_iteration_iterator(); - if (require_has_symbols()() || require_shams()()) { - $iterator = Symbol.iterator; - module2.exports = function getIterator3(iterable) { - if (iterable != null && typeof iterable[$iterator] !== "undefined") { - return iterable[$iterator](); - } - if (isArguments(iterable)) { - return Array.prototype[$iterator].call(iterable); - } - }; - } else { - isArray = require_isarray(); - isString = require_is_string(); - GetIntrinsic = require_get_intrinsic(); - $Map = GetIntrinsic("%Map%", true); - $Set = GetIntrinsic("%Set%", true); - callBound = require_callBound(); - $arrayPush = callBound("Array.prototype.push"); - $charCodeAt = callBound("String.prototype.charCodeAt"); - $stringSlice = callBound("String.prototype.slice"); - advanceStringIndex = function advanceStringIndex2(S, index2) { - var length = S.length; - if (index2 + 1 >= length) { - return index2 + 1; - } - var first2 = $charCodeAt(S, index2); - if (first2 < 55296 || first2 > 56319) { - return index2 + 1; - } - var second = $charCodeAt(S, index2 + 1); - if (second < 56320 || second > 57343) { - return index2 + 1; - } - return index2 + 2; - }; - getArrayIterator = function getArrayIterator2(arraylike) { - var i = 0; - return { - next: function next() { - var done = i >= arraylike.length; - var value; - if (!done) { - value = arraylike[i]; - i += 1; - } - return { - done, - value - }; - } - }; - }; - getNonCollectionIterator = function getNonCollectionIterator2(iterable, noPrimordialCollections) { - if (isArray(iterable) || isArguments(iterable)) { - return getArrayIterator(iterable); - } - if (isString(iterable)) { - var i = 0; - return { - next: function next() { - var nextIndex = advanceStringIndex(iterable, i); - var value = $stringSlice(iterable, i, nextIndex); - i = nextIndex; - return { - done: nextIndex > iterable.length, - value - }; - } - }; - } - if (noPrimordialCollections && typeof iterable["_es6-shim iterator_"] !== "undefined") { - return iterable["_es6-shim iterator_"](); - } - }; - if (!$Map && !$Set) { - module2.exports = function getIterator3(iterable) { - if (iterable != null) { - return getNonCollectionIterator(iterable, true); - } - }; - } else { - isMap = require_is_map(); - isSet = require_is_set(); - $mapForEach = callBound("Map.prototype.forEach", true); - $setForEach = callBound("Set.prototype.forEach", true); - if (typeof process === "undefined" || !process.versions || !process.versions.node) { - $mapIterator = callBound("Map.prototype.iterator", true); - $setIterator = callBound("Set.prototype.iterator", true); - } - $mapAtAtIterator = callBound("Map.prototype.@@iterator", true) || callBound("Map.prototype._es6-shim iterator_", true); - $setAtAtIterator = callBound("Set.prototype.@@iterator", true) || callBound("Set.prototype._es6-shim iterator_", true); - getCollectionIterator = function getCollectionIterator2(iterable) { - if (isMap(iterable)) { - if ($mapIterator) { - return getStopIterationIterator($mapIterator(iterable)); - } - if ($mapAtAtIterator) { - return $mapAtAtIterator(iterable); - } - if ($mapForEach) { - var entries = []; - $mapForEach(iterable, function(v, k) { - $arrayPush(entries, [k, v]); - }); - return getArrayIterator(entries); - } - } - if (isSet(iterable)) { - if ($setIterator) { - return getStopIterationIterator($setIterator(iterable)); - } - if ($setAtAtIterator) { - return $setAtAtIterator(iterable); - } - if ($setForEach) { - var values = []; - $setForEach(iterable, function(v) { - $arrayPush(values, v); - }); - return getArrayIterator(values); - } - } - }; - module2.exports = function getIterator3(iterable) { - return getCollectionIterator(iterable) || getNonCollectionIterator(iterable); - }; - } - } - var $iterator; - var isArray; - var isString; - var GetIntrinsic; - var $Map; - var $Set; - var callBound; - var $arrayPush; - var $charCodeAt; - var $stringSlice; - var advanceStringIndex; - var getArrayIterator; - var getNonCollectionIterator; - var isMap; - var isSet; - var $mapForEach; - var $setForEach; - var $mapIterator; - var $setIterator; - var $mapAtAtIterator; - var $setAtAtIterator; - var getCollectionIterator; - } -}); - -// node_modules/.pnpm/object-is@1.1.5/node_modules/object-is/implementation.js -var require_implementation5 = __commonJS({ - "node_modules/.pnpm/object-is@1.1.5/node_modules/object-is/implementation.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - var numberIsNaN = function(value) { - return value !== value; - }; - module2.exports = function is(a, b) { - if (a === 0 && b === 0) { - return 1 / a === 1 / b; - } - if (a === b) { - return true; - } - if (numberIsNaN(a) && numberIsNaN(b)) { - return true; - } - return false; - }; - } -}); - -// node_modules/.pnpm/object-is@1.1.5/node_modules/object-is/polyfill.js -var require_polyfill3 = __commonJS({ - "node_modules/.pnpm/object-is@1.1.5/node_modules/object-is/polyfill.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - var implementation = require_implementation5(); - module2.exports = function getPolyfill() { - return typeof Object.is === "function" ? Object.is : implementation; - }; - } -}); - -// node_modules/.pnpm/object-is@1.1.5/node_modules/object-is/shim.js -var require_shim3 = __commonJS({ - "node_modules/.pnpm/object-is@1.1.5/node_modules/object-is/shim.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - var getPolyfill = require_polyfill3(); - var define2 = require_define_properties(); - module2.exports = function shimObjectIs() { - var polyfill = getPolyfill(); - define2(Object, { is: polyfill }, { - is: function testObjectIs() { - return Object.is !== polyfill; - } - }); - return polyfill; - }; - } -}); - -// node_modules/.pnpm/object-is@1.1.5/node_modules/object-is/index.js -var require_object_is = __commonJS({ - "node_modules/.pnpm/object-is@1.1.5/node_modules/object-is/index.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - var define2 = require_define_properties(); - var callBind = require_call_bind(); - var implementation = require_implementation5(); - var getPolyfill = require_polyfill3(); - var shim = require_shim3(); - var polyfill = callBind(getPolyfill(), Object); - define2(polyfill, { - getPolyfill, - implementation, - shim - }); - module2.exports = polyfill; - } -}); - -// node_modules/.pnpm/is-array-buffer@3.0.4/node_modules/is-array-buffer/index.js -var require_is_array_buffer = __commonJS({ - "node_modules/.pnpm/is-array-buffer@3.0.4/node_modules/is-array-buffer/index.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - var callBind = require_call_bind(); - var callBound = require_callBound(); - var GetIntrinsic = require_get_intrinsic(); - var $ArrayBuffer = GetIntrinsic("%ArrayBuffer%", true); - var $byteLength = callBound("ArrayBuffer.prototype.byteLength", true); - var $toString = callBound("Object.prototype.toString"); - var abSlice = !!$ArrayBuffer && !$byteLength && new $ArrayBuffer(0).slice; - var $abSlice = !!abSlice && callBind(abSlice); - module2.exports = $byteLength || $abSlice ? function isArrayBuffer(obj) { - if (!obj || typeof obj !== "object") { - return false; - } - try { - if ($byteLength) { - $byteLength(obj); - } else { - $abSlice(obj, 0); - } - return true; - } catch (e) { - return false; - } - } : $ArrayBuffer ? function isArrayBuffer(obj) { - return $toString(obj) === "[object ArrayBuffer]"; - } : function isArrayBuffer(obj) { - return false; - }; - } -}); - -// node_modules/.pnpm/is-date-object@1.0.5/node_modules/is-date-object/index.js -var require_is_date_object = __commonJS({ - "node_modules/.pnpm/is-date-object@1.0.5/node_modules/is-date-object/index.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - var getDay = Date.prototype.getDay; - var tryDateObject = function tryDateGetDayCall(value) { - try { - getDay.call(value); - return true; - } catch (e) { - return false; - } - }; - var toStr = Object.prototype.toString; - var dateClass = "[object Date]"; - var hasToStringTag = require_shams2()(); - module2.exports = function isDateObject(value) { - if (typeof value !== "object" || value === null) { - return false; - } - return hasToStringTag ? tryDateObject(value) : toStr.call(value) === dateClass; - }; - } -}); - -// node_modules/.pnpm/is-regex@1.1.4/node_modules/is-regex/index.js -var require_is_regex = __commonJS({ - "node_modules/.pnpm/is-regex@1.1.4/node_modules/is-regex/index.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - var callBound = require_callBound(); - var hasToStringTag = require_shams2()(); - var has; - var $exec; - var isRegexMarker; - var badStringifier; - if (hasToStringTag) { - has = callBound("Object.prototype.hasOwnProperty"); - $exec = callBound("RegExp.prototype.exec"); - isRegexMarker = {}; - throwRegexMarker = function() { - throw isRegexMarker; - }; - badStringifier = { - toString: throwRegexMarker, - valueOf: throwRegexMarker - }; - if (typeof Symbol.toPrimitive === "symbol") { - badStringifier[Symbol.toPrimitive] = throwRegexMarker; - } - } - var throwRegexMarker; - var $toString = callBound("Object.prototype.toString"); - var gOPD = Object.getOwnPropertyDescriptor; - var regexClass = "[object RegExp]"; - module2.exports = hasToStringTag ? function isRegex(value) { - if (!value || typeof value !== "object") { - return false; - } - var descriptor = gOPD(value, "lastIndex"); - var hasLastIndexDataProperty = descriptor && has(descriptor, "value"); - if (!hasLastIndexDataProperty) { - return false; - } - try { - $exec(value, badStringifier); - } catch (e) { - return e === isRegexMarker; - } - } : function isRegex(value) { - if (!value || typeof value !== "object" && typeof value !== "function") { - return false; - } - return $toString(value) === regexClass; - }; - } -}); - -// node_modules/.pnpm/is-shared-array-buffer@1.0.2/node_modules/is-shared-array-buffer/index.js -var require_is_shared_array_buffer = __commonJS({ - "node_modules/.pnpm/is-shared-array-buffer@1.0.2/node_modules/is-shared-array-buffer/index.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - var callBound = require_callBound(); - var $byteLength = callBound("SharedArrayBuffer.prototype.byteLength", true); - module2.exports = $byteLength ? function isSharedArrayBuffer(obj) { - if (!obj || typeof obj !== "object") { - return false; - } - try { - $byteLength(obj); - return true; - } catch (e) { - return false; - } - } : function isSharedArrayBuffer(obj) { - return false; - }; - } -}); - -// node_modules/.pnpm/is-number-object@1.0.7/node_modules/is-number-object/index.js -var require_is_number_object = __commonJS({ - "node_modules/.pnpm/is-number-object@1.0.7/node_modules/is-number-object/index.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - var numToStr = Number.prototype.toString; - var tryNumberObject = function tryNumberObject2(value) { - try { - numToStr.call(value); - return true; - } catch (e) { - return false; - } - }; - var toStr = Object.prototype.toString; - var numClass = "[object Number]"; - var hasToStringTag = require_shams2()(); - module2.exports = function isNumberObject(value) { - if (typeof value === "number") { - return true; - } - if (typeof value !== "object") { - return false; - } - return hasToStringTag ? tryNumberObject(value) : toStr.call(value) === numClass; - }; - } -}); - -// node_modules/.pnpm/is-boolean-object@1.1.2/node_modules/is-boolean-object/index.js -var require_is_boolean_object = __commonJS({ - "node_modules/.pnpm/is-boolean-object@1.1.2/node_modules/is-boolean-object/index.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - var callBound = require_callBound(); - var $boolToStr = callBound("Boolean.prototype.toString"); - var $toString = callBound("Object.prototype.toString"); - var tryBooleanObject = function booleanBrandCheck(value) { - try { - $boolToStr(value); - return true; - } catch (e) { - return false; - } - }; - var boolClass = "[object Boolean]"; - var hasToStringTag = require_shams2()(); - module2.exports = function isBoolean(value) { - if (typeof value === "boolean") { - return true; - } - if (value === null || typeof value !== "object") { - return false; - } - return hasToStringTag && Symbol.toStringTag in value ? tryBooleanObject(value) : $toString(value) === boolClass; - }; - } -}); - -// node_modules/.pnpm/is-symbol@1.0.4/node_modules/is-symbol/index.js -var require_is_symbol = __commonJS({ - "node_modules/.pnpm/is-symbol@1.0.4/node_modules/is-symbol/index.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - var toStr = Object.prototype.toString; - var hasSymbols = require_has_symbols()(); - if (hasSymbols) { - symToStr = Symbol.prototype.toString; - symStringRegex = /^Symbol\(.*\)$/; - isSymbolObject = function isRealSymbolObject(value) { - if (typeof value.valueOf() !== "symbol") { - return false; - } - return symStringRegex.test(symToStr.call(value)); - }; - module2.exports = function isSymbol(value) { - if (typeof value === "symbol") { - return true; - } - if (toStr.call(value) !== "[object Symbol]") { - return false; - } - try { - return isSymbolObject(value); - } catch (e) { - return false; - } - }; - } else { - module2.exports = function isSymbol(value) { - return false; - }; - } - var symToStr; - var symStringRegex; - var isSymbolObject; - } -}); - -// node_modules/.pnpm/has-bigints@1.0.2/node_modules/has-bigints/index.js -var require_has_bigints = __commonJS({ - "node_modules/.pnpm/has-bigints@1.0.2/node_modules/has-bigints/index.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - var $BigInt = typeof BigInt !== "undefined" && BigInt; - module2.exports = function hasNativeBigInts() { - return typeof $BigInt === "function" && typeof BigInt === "function" && typeof $BigInt(42) === "bigint" && typeof BigInt(42) === "bigint"; - }; - } -}); - -// node_modules/.pnpm/is-bigint@1.0.4/node_modules/is-bigint/index.js -var require_is_bigint = __commonJS({ - "node_modules/.pnpm/is-bigint@1.0.4/node_modules/is-bigint/index.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - var hasBigInts = require_has_bigints()(); - if (hasBigInts) { - bigIntValueOf = BigInt.prototype.valueOf; - tryBigInt = function tryBigIntObject(value) { - try { - bigIntValueOf.call(value); - return true; - } catch (e) { - } - return false; - }; - module2.exports = function isBigInt(value) { - if (value === null || typeof value === "undefined" || typeof value === "boolean" || typeof value === "string" || typeof value === "number" || typeof value === "symbol" || typeof value === "function") { - return false; - } - if (typeof value === "bigint") { - return true; - } - return tryBigInt(value); - }; - } else { - module2.exports = function isBigInt(value) { - return false; - }; - } - var bigIntValueOf; - var tryBigInt; - } -}); - -// node_modules/.pnpm/which-boxed-primitive@1.0.2/node_modules/which-boxed-primitive/index.js -var require_which_boxed_primitive = __commonJS({ - "node_modules/.pnpm/which-boxed-primitive@1.0.2/node_modules/which-boxed-primitive/index.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - var isString = require_is_string(); - var isNumber = require_is_number_object(); - var isBoolean = require_is_boolean_object(); - var isSymbol = require_is_symbol(); - var isBigInt = require_is_bigint(); - module2.exports = function whichBoxedPrimitive(value) { - if (value == null || typeof value !== "object" && typeof value !== "function") { - return null; - } - if (isString(value)) { - return "String"; - } - if (isNumber(value)) { - return "Number"; - } - if (isBoolean(value)) { - return "Boolean"; - } - if (isSymbol(value)) { - return "Symbol"; - } - if (isBigInt(value)) { - return "BigInt"; - } - }; - } -}); - -// node_modules/.pnpm/is-weakmap@2.0.1/node_modules/is-weakmap/index.js -var require_is_weakmap = __commonJS({ - "node_modules/.pnpm/is-weakmap@2.0.1/node_modules/is-weakmap/index.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - var $WeakMap = typeof WeakMap === "function" && WeakMap.prototype ? WeakMap : null; - var $WeakSet = typeof WeakSet === "function" && WeakSet.prototype ? WeakSet : null; - var exported; - if (!$WeakMap) { - exported = function isWeakMap(x) { - return false; - }; - } - var $mapHas = $WeakMap ? $WeakMap.prototype.has : null; - var $setHas = $WeakSet ? $WeakSet.prototype.has : null; - if (!exported && !$mapHas) { - exported = function isWeakMap(x) { - return false; - }; - } - module2.exports = exported || function isWeakMap(x) { - if (!x || typeof x !== "object") { - return false; - } - try { - $mapHas.call(x, $mapHas); - if ($setHas) { - try { - $setHas.call(x, $setHas); - } catch (e) { - return true; - } - } - return x instanceof $WeakMap; - } catch (e) { - } - return false; - }; - } -}); - -// node_modules/.pnpm/is-weakset@2.0.2/node_modules/is-weakset/index.js -var require_is_weakset = __commonJS({ - "node_modules/.pnpm/is-weakset@2.0.2/node_modules/is-weakset/index.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - var GetIntrinsic = require_get_intrinsic(); - var callBound = require_callBound(); - var $WeakSet = GetIntrinsic("%WeakSet%", true); - var $setHas = callBound("WeakSet.prototype.has", true); - if ($setHas) { - $mapHas = callBound("WeakMap.prototype.has", true); - module2.exports = function isWeakSet(x) { - if (!x || typeof x !== "object") { - return false; - } - try { - $setHas(x, $setHas); - if ($mapHas) { - try { - $mapHas(x, $mapHas); - } catch (e) { - return true; - } - } - return x instanceof $WeakSet; - } catch (e) { - } - return false; - }; - } else { - module2.exports = function isWeakSet(x) { - return false; - }; - } - var $mapHas; - } -}); - -// node_modules/.pnpm/which-collection@1.0.1/node_modules/which-collection/index.js -var require_which_collection = __commonJS({ - "node_modules/.pnpm/which-collection@1.0.1/node_modules/which-collection/index.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - var isMap = require_is_map(); - var isSet = require_is_set(); - var isWeakMap = require_is_weakmap(); - var isWeakSet = require_is_weakset(); - module2.exports = function whichCollection(value) { - if (value && typeof value === "object") { - if (isMap(value)) { - return "Map"; - } - if (isSet(value)) { - return "Set"; - } - if (isWeakMap(value)) { - return "WeakMap"; - } - if (isWeakSet(value)) { - return "WeakSet"; - } - } - return false; - }; - } -}); - -// node_modules/.pnpm/is-callable@1.2.7/node_modules/is-callable/index.js -var require_is_callable = __commonJS({ - "node_modules/.pnpm/is-callable@1.2.7/node_modules/is-callable/index.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - var fnToStr = Function.prototype.toString; - var reflectApply = typeof Reflect === "object" && Reflect !== null && Reflect.apply; - var badArrayLike; - var isCallableMarker; - if (typeof reflectApply === "function" && typeof Object.defineProperty === "function") { - try { - badArrayLike = Object.defineProperty({}, "length", { - get: function() { - throw isCallableMarker; - } - }); - isCallableMarker = {}; - reflectApply(function() { - throw 42; - }, null, badArrayLike); - } catch (_) { - if (_ !== isCallableMarker) { - reflectApply = null; - } - } - } else { - reflectApply = null; - } - var constructorRegex = /^\s*class\b/; - var isES6ClassFn = function isES6ClassFunction(value) { - try { - var fnStr = fnToStr.call(value); - return constructorRegex.test(fnStr); - } catch (e) { - return false; - } - }; - var tryFunctionObject = function tryFunctionToStr(value) { - try { - if (isES6ClassFn(value)) { - return false; - } - fnToStr.call(value); - return true; - } catch (e) { - return false; - } - }; - var toStr = Object.prototype.toString; - var objectClass = "[object Object]"; - var fnClass = "[object Function]"; - var genClass = "[object GeneratorFunction]"; - var ddaClass = "[object HTMLAllCollection]"; - var ddaClass2 = "[object HTML document.all class]"; - var ddaClass3 = "[object HTMLCollection]"; - var hasToStringTag = typeof Symbol === "function" && !!Symbol.toStringTag; - var isIE68 = !(0 in [,]); - var isDDA = function isDocumentDotAll() { - return false; - }; - if (typeof document === "object") { - all = document.all; - if (toStr.call(all) === toStr.call(document.all)) { - isDDA = function isDocumentDotAll(value) { - if ((isIE68 || !value) && (typeof value === "undefined" || typeof value === "object")) { - try { - var str = toStr.call(value); - return (str === ddaClass || str === ddaClass2 || str === ddaClass3 || str === objectClass) && value("") == null; - } catch (e) { - } - } - return false; - }; - } - } - var all; - module2.exports = reflectApply ? function isCallable(value) { - if (isDDA(value)) { - return true; - } - if (!value) { - return false; - } - if (typeof value !== "function" && typeof value !== "object") { - return false; - } - try { - reflectApply(value, null, badArrayLike); - } catch (e) { - if (e !== isCallableMarker) { - return false; - } - } - return !isES6ClassFn(value) && tryFunctionObject(value); - } : function isCallable(value) { - if (isDDA(value)) { - return true; - } - if (!value) { - return false; - } - if (typeof value !== "function" && typeof value !== "object") { - return false; - } - if (hasToStringTag) { - return tryFunctionObject(value); - } - if (isES6ClassFn(value)) { - return false; - } - var strClass = toStr.call(value); - if (strClass !== fnClass && strClass !== genClass && !/^\[object HTML/.test(strClass)) { - return false; - } - return tryFunctionObject(value); - }; - } -}); - -// node_modules/.pnpm/for-each@0.3.3/node_modules/for-each/index.js -var require_for_each = __commonJS({ - "node_modules/.pnpm/for-each@0.3.3/node_modules/for-each/index.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - var isCallable = require_is_callable(); - var toStr = Object.prototype.toString; - var hasOwnProperty = Object.prototype.hasOwnProperty; - var forEachArray = function forEachArray2(array, iterator, receiver) { - for (var i = 0, len = array.length; i < len; i++) { - if (hasOwnProperty.call(array, i)) { - if (receiver == null) { - iterator(array[i], i, array); - } else { - iterator.call(receiver, array[i], i, array); - } - } - } - }; - var forEachString = function forEachString2(string, iterator, receiver) { - for (var i = 0, len = string.length; i < len; i++) { - if (receiver == null) { - iterator(string.charAt(i), i, string); - } else { - iterator.call(receiver, string.charAt(i), i, string); - } - } - }; - var forEachObject = function forEachObject2(object, iterator, receiver) { - for (var k in object) { - if (hasOwnProperty.call(object, k)) { - if (receiver == null) { - iterator(object[k], k, object); - } else { - iterator.call(receiver, object[k], k, object); - } - } - } - }; - var forEach2 = function forEach3(list, iterator, thisArg) { - if (!isCallable(iterator)) { - throw new TypeError("iterator must be a function"); - } - var receiver; - if (arguments.length >= 3) { - receiver = thisArg; - } - if (toStr.call(list) === "[object Array]") { - forEachArray(list, iterator, receiver); - } else if (typeof list === "string") { - forEachString(list, iterator, receiver); - } else { - forEachObject(list, iterator, receiver); - } - }; - module2.exports = forEach2; - } -}); - -// node_modules/.pnpm/available-typed-arrays@1.0.6/node_modules/available-typed-arrays/index.js -var require_available_typed_arrays = __commonJS({ - "node_modules/.pnpm/available-typed-arrays@1.0.6/node_modules/available-typed-arrays/index.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - var possibleNames = [ - "BigInt64Array", - "BigUint64Array", - "Float32Array", - "Float64Array", - "Int16Array", - "Int32Array", - "Int8Array", - "Uint16Array", - "Uint32Array", - "Uint8Array", - "Uint8ClampedArray" - ]; - var g = typeof globalThis === "undefined" ? global : globalThis; - module2.exports = function availableTypedArrays() { - var out = []; - for (var i = 0; i < possibleNames.length; i++) { - if (typeof g[possibleNames[i]] === "function") { - out[out.length] = possibleNames[i]; - } - } - return out; - }; - } -}); - -// node_modules/.pnpm/which-typed-array@1.1.14/node_modules/which-typed-array/index.js -var require_which_typed_array = __commonJS({ - "node_modules/.pnpm/which-typed-array@1.1.14/node_modules/which-typed-array/index.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - var forEach2 = require_for_each(); - var availableTypedArrays = require_available_typed_arrays(); - var callBind = require_call_bind(); - var callBound = require_callBound(); - var gOPD = require_gopd(); - var $toString = callBound("Object.prototype.toString"); - var hasToStringTag = require_shams2()(); - var g = typeof globalThis === "undefined" ? global : globalThis; - var typedArrays = availableTypedArrays(); - var $slice = callBound("String.prototype.slice"); - var getPrototypeOf = Object.getPrototypeOf; - var $indexOf = callBound("Array.prototype.indexOf", true) || /** @type {(array: readonly unknown[], value: unknown) => keyof array} */ - function indexOf(array, value) { - for (var i = 0; i < array.length; i += 1) { - if (array[i] === value) { - return i; - } - } - return -1; - }; - var cache = { __proto__: null }; - if (hasToStringTag && gOPD && getPrototypeOf) { - forEach2(typedArrays, function(typedArray) { - var arr = new g[typedArray](); - if (Symbol.toStringTag in arr) { - var proto = getPrototypeOf(arr); - var descriptor = gOPD(proto, Symbol.toStringTag); - if (!descriptor) { - var superProto = getPrototypeOf(proto); - descriptor = gOPD(superProto, Symbol.toStringTag); - } - cache["$" + typedArray] = callBind(descriptor.get); - } - }); - } else { - forEach2(typedArrays, function(typedArray) { - var arr = new g[typedArray](); - var fn = arr.slice || arr.set; - if (fn) { - cache["$" + typedArray] = callBind(fn); - } - }); - } - var tryTypedArrays = function tryAllTypedArrays(value) { - var found = false; - forEach2( - // eslint-disable-next-line no-extra-parens - /** @type {Record<`\$${TypedArrayName}`, typeof cache>} */ - /** @type {any} */ - cache, - /** @type {(getter: typeof cache, name: `\$${TypedArrayName}`) => void} */ - function(getter, typedArray) { - if (!found) { - try { - if ("$" + getter(value) === typedArray) { - found = $slice(typedArray, 1); - } - } catch (e) { - } - } - } - ); - return found; - }; - var trySlices = function tryAllSlices(value) { - var found = false; - forEach2( - // eslint-disable-next-line no-extra-parens - /** @type {any} */ - cache, - /** @type {(getter: typeof cache, name: `\$${TypedArrayName}`) => void} */ - function(getter, name) { - if (!found) { - try { - getter(value); - found = $slice(name, 1); - } catch (e) { - } - } - } - ); - return found; - }; - module2.exports = function whichTypedArray(value) { - if (!value || typeof value !== "object") { - return false; - } - if (!hasToStringTag) { - var tag2 = $slice($toString(value), 8, -1); - if ($indexOf(typedArrays, tag2) > -1) { - return tag2; - } - if (tag2 !== "Object") { - return false; - } - return trySlices(value); - } - if (!gOPD) { - return null; - } - return tryTypedArrays(value); - }; - } -}); - -// node_modules/.pnpm/array-buffer-byte-length@1.0.1/node_modules/array-buffer-byte-length/index.js -var require_array_buffer_byte_length = __commonJS({ - "node_modules/.pnpm/array-buffer-byte-length@1.0.1/node_modules/array-buffer-byte-length/index.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - var callBound = require_callBound(); - var $byteLength = callBound("ArrayBuffer.prototype.byteLength", true); - var isArrayBuffer = require_is_array_buffer(); - module2.exports = function byteLength(ab) { - if (!isArrayBuffer(ab)) { - return NaN; - } - return $byteLength ? $byteLength(ab) : ab.byteLength; - }; - } -}); - -// node_modules/.pnpm/deep-equal@2.2.3/node_modules/deep-equal/index.js -var require_deep_equal = __commonJS({ - "node_modules/.pnpm/deep-equal@2.2.3/node_modules/deep-equal/index.js"(exports2, module2) { - "use strict"; - init_polyfill_buffer(); - var assign2 = require_object(); - var callBound = require_callBound(); - var flags = require_regexp_prototype(); - var GetIntrinsic = require_get_intrinsic(); - var getIterator3 = require_es_get_iterator(); - var getSideChannel = require_side_channel(); - var is = require_object_is(); - var isArguments = require_is_arguments(); - var isArray = require_isarray(); - var isArrayBuffer = require_is_array_buffer(); - var isDate = require_is_date_object(); - var isRegex = require_is_regex(); - var isSharedArrayBuffer = require_is_shared_array_buffer(); - var objectKeys = require_object_keys(); - var whichBoxedPrimitive = require_which_boxed_primitive(); - var whichCollection = require_which_collection(); - var whichTypedArray = require_which_typed_array(); - var byteLength = require_array_buffer_byte_length(); - var sabByteLength = callBound("SharedArrayBuffer.prototype.byteLength", true); - var $getTime = callBound("Date.prototype.getTime"); - var gPO = Object.getPrototypeOf; - var $objToString = callBound("Object.prototype.toString"); - var $Set = GetIntrinsic("%Set%", true); - var $mapHas = callBound("Map.prototype.has", true); - var $mapGet = callBound("Map.prototype.get", true); - var $mapSize = callBound("Map.prototype.size", true); - var $setAdd = callBound("Set.prototype.add", true); - var $setDelete = callBound("Set.prototype.delete", true); - var $setHas = callBound("Set.prototype.has", true); - var $setSize = callBound("Set.prototype.size", true); - function setHasEqualElement(set, val1, opts, channel) { - var i = getIterator3(set); - var result; - while ((result = i.next()) && !result.done) { - if (internalDeepEqual(val1, result.value, opts, channel)) { - $setDelete(set, result.value); - return true; - } - } - return false; - } - function findLooseMatchingPrimitives(prim) { - if (typeof prim === "undefined") { - return null; - } - if (typeof prim === "object") { - return void 0; - } - if (typeof prim === "symbol") { - return false; - } - if (typeof prim === "string" || typeof prim === "number") { - return +prim === +prim; - } - return true; - } - function mapMightHaveLoosePrim(a, b, prim, item, opts, channel) { - var altValue = findLooseMatchingPrimitives(prim); - if (altValue != null) { - return altValue; - } - var curB = $mapGet(b, altValue); - var looseOpts = assign2({}, opts, { strict: false }); - if (typeof curB === "undefined" && !$mapHas(b, altValue) || !internalDeepEqual(item, curB, looseOpts, channel)) { - return false; - } - return !$mapHas(a, altValue) && internalDeepEqual(item, curB, looseOpts, channel); - } - function setMightHaveLoosePrim(a, b, prim) { - var altValue = findLooseMatchingPrimitives(prim); - if (altValue != null) { - return altValue; - } - return $setHas(b, altValue) && !$setHas(a, altValue); - } - function mapHasEqualEntry(set, map, key1, item1, opts, channel) { - var i = getIterator3(set); - var result; - var key2; - while ((result = i.next()) && !result.done) { - key2 = result.value; - if ( - // eslint-disable-next-line no-use-before-define - internalDeepEqual(key1, key2, opts, channel) && internalDeepEqual(item1, $mapGet(map, key2), opts, channel) - ) { - $setDelete(set, key2); - return true; - } - } - return false; - } - function internalDeepEqual(actual, expected, options, channel) { - var opts = options || {}; - if (opts.strict ? is(actual, expected) : actual === expected) { - return true; - } - var actualBoxed = whichBoxedPrimitive(actual); - var expectedBoxed = whichBoxedPrimitive(expected); - if (actualBoxed !== expectedBoxed) { - return false; - } - if (!actual || !expected || typeof actual !== "object" && typeof expected !== "object") { - return opts.strict ? is(actual, expected) : actual == expected; - } - var hasActual = channel.has(actual); - var hasExpected = channel.has(expected); - var sentinel; - if (hasActual && hasExpected) { - if (channel.get(actual) === channel.get(expected)) { - return true; - } - } else { - sentinel = {}; - } - if (!hasActual) { - channel.set(actual, sentinel); - } - if (!hasExpected) { - channel.set(expected, sentinel); - } - return objEquiv(actual, expected, opts, channel); - } - function isBuffer(x) { - if (!x || typeof x !== "object" || typeof x.length !== "number") { - return false; - } - if (typeof x.copy !== "function" || typeof x.slice !== "function") { - return false; - } - if (x.length > 0 && typeof x[0] !== "number") { - return false; - } - return !!(x.constructor && x.constructor.isBuffer && x.constructor.isBuffer(x)); - } - function setEquiv(a, b, opts, channel) { - if ($setSize(a) !== $setSize(b)) { - return false; - } - var iA = getIterator3(a); - var iB = getIterator3(b); - var resultA; - var resultB; - var set; - while ((resultA = iA.next()) && !resultA.done) { - if (resultA.value && typeof resultA.value === "object") { - if (!set) { - set = new $Set(); - } - $setAdd(set, resultA.value); - } else if (!$setHas(b, resultA.value)) { - if (opts.strict) { - return false; - } - if (!setMightHaveLoosePrim(a, b, resultA.value)) { - return false; - } - if (!set) { - set = new $Set(); - } - $setAdd(set, resultA.value); - } - } - if (set) { - while ((resultB = iB.next()) && !resultB.done) { - if (resultB.value && typeof resultB.value === "object") { - if (!setHasEqualElement(set, resultB.value, opts.strict, channel)) { - return false; - } - } else if (!opts.strict && !$setHas(a, resultB.value) && !setHasEqualElement(set, resultB.value, opts.strict, channel)) { - return false; - } - } - return $setSize(set) === 0; - } - return true; - } - function mapEquiv(a, b, opts, channel) { - if ($mapSize(a) !== $mapSize(b)) { - return false; - } - var iA = getIterator3(a); - var iB = getIterator3(b); - var resultA; - var resultB; - var set; - var key2; - var item1; - var item2; - while ((resultA = iA.next()) && !resultA.done) { - key2 = resultA.value[0]; - item1 = resultA.value[1]; - if (key2 && typeof key2 === "object") { - if (!set) { - set = new $Set(); - } - $setAdd(set, key2); - } else { - item2 = $mapGet(b, key2); - if (typeof item2 === "undefined" && !$mapHas(b, key2) || !internalDeepEqual(item1, item2, opts, channel)) { - if (opts.strict) { - return false; - } - if (!mapMightHaveLoosePrim(a, b, key2, item1, opts, channel)) { - return false; - } - if (!set) { - set = new $Set(); - } - $setAdd(set, key2); - } - } - } - if (set) { - while ((resultB = iB.next()) && !resultB.done) { - key2 = resultB.value[0]; - item2 = resultB.value[1]; - if (key2 && typeof key2 === "object") { - if (!mapHasEqualEntry(set, a, key2, item2, opts, channel)) { - return false; - } - } else if (!opts.strict && (!a.has(key2) || !internalDeepEqual($mapGet(a, key2), item2, opts, channel)) && !mapHasEqualEntry(set, a, key2, item2, assign2({}, opts, { strict: false }), channel)) { - return false; - } - } - return $setSize(set) === 0; - } - return true; - } - function objEquiv(a, b, opts, channel) { - var i, key2; - if (typeof a !== typeof b) { - return false; - } - if (a == null || b == null) { - return false; - } - if ($objToString(a) !== $objToString(b)) { - return false; - } - if (isArguments(a) !== isArguments(b)) { - return false; - } - var aIsArray = isArray(a); - var bIsArray = isArray(b); - if (aIsArray !== bIsArray) { - return false; - } - var aIsError = a instanceof Error; - var bIsError = b instanceof Error; - if (aIsError !== bIsError) { - return false; - } - if (aIsError || bIsError) { - if (a.name !== b.name || a.message !== b.message) { - return false; - } - } - var aIsRegex = isRegex(a); - var bIsRegex = isRegex(b); - if (aIsRegex !== bIsRegex) { - return false; - } - if ((aIsRegex || bIsRegex) && (a.source !== b.source || flags(a) !== flags(b))) { - return false; - } - var aIsDate = isDate(a); - var bIsDate = isDate(b); - if (aIsDate !== bIsDate) { - return false; - } - if (aIsDate || bIsDate) { - if ($getTime(a) !== $getTime(b)) { - return false; - } - } - if (opts.strict && gPO && gPO(a) !== gPO(b)) { - return false; - } - var aWhich = whichTypedArray(a); - var bWhich = whichTypedArray(b); - if (aWhich !== bWhich) { - return false; - } - if (aWhich || bWhich) { - if (a.length !== b.length) { - return false; - } - for (i = 0; i < a.length; i++) { - if (a[i] !== b[i]) { - return false; - } - } - return true; - } - var aIsBuffer = isBuffer(a); - var bIsBuffer = isBuffer(b); - if (aIsBuffer !== bIsBuffer) { - return false; - } - if (aIsBuffer || bIsBuffer) { - if (a.length !== b.length) { - return false; - } - for (i = 0; i < a.length; i++) { - if (a[i] !== b[i]) { - return false; - } - } - return true; - } - var aIsArrayBuffer = isArrayBuffer(a); - var bIsArrayBuffer = isArrayBuffer(b); - if (aIsArrayBuffer !== bIsArrayBuffer) { - return false; - } - if (aIsArrayBuffer || bIsArrayBuffer) { - if (byteLength(a) !== byteLength(b)) { - return false; - } - return typeof Uint8Array === "function" && internalDeepEqual(new Uint8Array(a), new Uint8Array(b), opts, channel); - } - var aIsSAB = isSharedArrayBuffer(a); - var bIsSAB = isSharedArrayBuffer(b); - if (aIsSAB !== bIsSAB) { - return false; - } - if (aIsSAB || bIsSAB) { - if (sabByteLength(a) !== sabByteLength(b)) { - return false; - } - return typeof Uint8Array === "function" && internalDeepEqual(new Uint8Array(a), new Uint8Array(b), opts, channel); - } - if (typeof a !== typeof b) { - return false; - } - var ka = objectKeys(a); - var kb = objectKeys(b); - if (ka.length !== kb.length) { - return false; - } - ka.sort(); - kb.sort(); - for (i = ka.length - 1; i >= 0; i--) { - if (ka[i] != kb[i]) { - return false; - } - } - for (i = ka.length - 1; i >= 0; i--) { - key2 = ka[i]; - if (!internalDeepEqual(a[key2], b[key2], opts, channel)) { - return false; - } - } - var aCollection = whichCollection(a); - var bCollection = whichCollection(b); - if (aCollection !== bCollection) { - return false; - } - if (aCollection === "Set" || bCollection === "Set") { - return setEquiv(a, b, opts, channel); - } - if (aCollection === "Map") { - return mapEquiv(a, b, opts, channel); - } - return true; - } - module2.exports = function deepEqual2(a, b, opts) { - return internalDeepEqual(a, b, opts, getSideChannel()); - }; - } -}); - -// node_modules/.pnpm/js-sha256@0.9.0/node_modules/js-sha256/src/sha256.js -var require_sha256 = __commonJS({ - "node_modules/.pnpm/js-sha256@0.9.0/node_modules/js-sha256/src/sha256.js"(exports, module) { - init_polyfill_buffer(); - (function() { - "use strict"; - var ERROR = "input is invalid type"; - var WINDOW = typeof window === "object"; - var root = WINDOW ? window : {}; - if (root.JS_SHA256_NO_WINDOW) { - WINDOW = false; - } - var WEB_WORKER = !WINDOW && typeof self === "object"; - var NODE_JS = !root.JS_SHA256_NO_NODE_JS && typeof process === "object" && process.versions && process.versions.node; - if (NODE_JS) { - root = global; - } else if (WEB_WORKER) { - root = self; - } - var COMMON_JS = !root.JS_SHA256_NO_COMMON_JS && typeof module === "object" && module.exports; - var AMD = typeof define === "function" && define.amd; - var ARRAY_BUFFER = !root.JS_SHA256_NO_ARRAY_BUFFER && typeof ArrayBuffer !== "undefined"; - var HEX_CHARS = "0123456789abcdef".split(""); - var EXTRA = [-2147483648, 8388608, 32768, 128]; - var SHIFT = [24, 16, 8, 0]; - var K = [ - 1116352408, - 1899447441, - 3049323471, - 3921009573, - 961987163, - 1508970993, - 2453635748, - 2870763221, - 3624381080, - 310598401, - 607225278, - 1426881987, - 1925078388, - 2162078206, - 2614888103, - 3248222580, - 3835390401, - 4022224774, - 264347078, - 604807628, - 770255983, - 1249150122, - 1555081692, - 1996064986, - 2554220882, - 2821834349, - 2952996808, - 3210313671, - 3336571891, - 3584528711, - 113926993, - 338241895, - 666307205, - 773529912, - 1294757372, - 1396182291, - 1695183700, - 1986661051, - 2177026350, - 2456956037, - 2730485921, - 2820302411, - 3259730800, - 3345764771, - 3516065817, - 3600352804, - 4094571909, - 275423344, - 430227734, - 506948616, - 659060556, - 883997877, - 958139571, - 1322822218, - 1537002063, - 1747873779, - 1955562222, - 2024104815, - 2227730452, - 2361852424, - 2428436474, - 2756734187, - 3204031479, - 3329325298 - ]; - var OUTPUT_TYPES = ["hex", "array", "digest", "arrayBuffer"]; - var blocks = []; - if (root.JS_SHA256_NO_NODE_JS || !Array.isArray) { - Array.isArray = function(obj) { - return Object.prototype.toString.call(obj) === "[object Array]"; - }; - } - if (ARRAY_BUFFER && (root.JS_SHA256_NO_ARRAY_BUFFER_IS_VIEW || !ArrayBuffer.isView)) { - ArrayBuffer.isView = function(obj) { - return typeof obj === "object" && obj.buffer && obj.buffer.constructor === ArrayBuffer; - }; - } - var createOutputMethod = function(outputType, is2242) { - return function(message) { - return new Sha256(is2242, true).update(message)[outputType](); - }; - }; - var createMethod = function(is2242) { - var method2 = createOutputMethod("hex", is2242); - if (NODE_JS) { - method2 = nodeWrap(method2, is2242); - } - method2.create = function() { - return new Sha256(is2242); - }; - method2.update = function(message) { - return method2.create().update(message); - }; - for (var i = 0; i < OUTPUT_TYPES.length; ++i) { - var type = OUTPUT_TYPES[i]; - method2[type] = createOutputMethod(type, is2242); - } - return method2; - }; - var nodeWrap = function(method, is224) { - var crypto = eval("require('crypto')"); - var Buffer = eval("require('buffer').Buffer"); - var algorithm = is224 ? "sha224" : "sha256"; - var nodeMethod = function(message) { - if (typeof message === "string") { - return crypto.createHash(algorithm).update(message, "utf8").digest("hex"); - } else { - if (message === null || message === void 0) { - throw new Error(ERROR); - } else if (message.constructor === ArrayBuffer) { - message = new Uint8Array(message); - } - } - if (Array.isArray(message) || ArrayBuffer.isView(message) || message.constructor === Buffer) { - return crypto.createHash(algorithm).update(new Buffer(message)).digest("hex"); - } else { - return method(message); - } - }; - return nodeMethod; - }; - var createHmacOutputMethod = function(outputType, is2242) { - return function(key2, message) { - return new HmacSha256(key2, is2242, true).update(message)[outputType](); - }; - }; - var createHmacMethod = function(is2242) { - var method2 = createHmacOutputMethod("hex", is2242); - method2.create = function(key2) { - return new HmacSha256(key2, is2242); - }; - method2.update = function(key2, message) { - return method2.create(key2).update(message); - }; - for (var i = 0; i < OUTPUT_TYPES.length; ++i) { - var type = OUTPUT_TYPES[i]; - method2[type] = createHmacOutputMethod(type, is2242); - } - return method2; - }; - function Sha256(is2242, sharedMemory) { - if (sharedMemory) { - blocks[0] = blocks[16] = blocks[1] = blocks[2] = blocks[3] = blocks[4] = blocks[5] = blocks[6] = blocks[7] = blocks[8] = blocks[9] = blocks[10] = blocks[11] = blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0; - this.blocks = blocks; - } else { - this.blocks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; - } - if (is2242) { - this.h0 = 3238371032; - this.h1 = 914150663; - this.h2 = 812702999; - this.h3 = 4144912697; - this.h4 = 4290775857; - this.h5 = 1750603025; - this.h6 = 1694076839; - this.h7 = 3204075428; - } else { - this.h0 = 1779033703; - this.h1 = 3144134277; - this.h2 = 1013904242; - this.h3 = 2773480762; - this.h4 = 1359893119; - this.h5 = 2600822924; - this.h6 = 528734635; - this.h7 = 1541459225; - } - this.block = this.start = this.bytes = this.hBytes = 0; - this.finalized = this.hashed = false; - this.first = true; - this.is224 = is2242; - } - Sha256.prototype.update = function(message) { - if (this.finalized) { - return; - } - var notString, type = typeof message; - if (type !== "string") { - if (type === "object") { - if (message === null) { - throw new Error(ERROR); - } else if (ARRAY_BUFFER && message.constructor === ArrayBuffer) { - message = new Uint8Array(message); - } else if (!Array.isArray(message)) { - if (!ARRAY_BUFFER || !ArrayBuffer.isView(message)) { - throw new Error(ERROR); - } - } - } else { - throw new Error(ERROR); - } - notString = true; - } - var code, index2 = 0, i, length = message.length, blocks2 = this.blocks; - while (index2 < length) { - if (this.hashed) { - this.hashed = false; - blocks2[0] = this.block; - blocks2[16] = blocks2[1] = blocks2[2] = blocks2[3] = blocks2[4] = blocks2[5] = blocks2[6] = blocks2[7] = blocks2[8] = blocks2[9] = blocks2[10] = blocks2[11] = blocks2[12] = blocks2[13] = blocks2[14] = blocks2[15] = 0; - } - if (notString) { - for (i = this.start; index2 < length && i < 64; ++index2) { - blocks2[i >> 2] |= message[index2] << SHIFT[i++ & 3]; - } - } else { - for (i = this.start; index2 < length && i < 64; ++index2) { - code = message.charCodeAt(index2); - if (code < 128) { - blocks2[i >> 2] |= code << SHIFT[i++ & 3]; - } else if (code < 2048) { - blocks2[i >> 2] |= (192 | code >> 6) << SHIFT[i++ & 3]; - blocks2[i >> 2] |= (128 | code & 63) << SHIFT[i++ & 3]; - } else if (code < 55296 || code >= 57344) { - blocks2[i >> 2] |= (224 | code >> 12) << SHIFT[i++ & 3]; - blocks2[i >> 2] |= (128 | code >> 6 & 63) << SHIFT[i++ & 3]; - blocks2[i >> 2] |= (128 | code & 63) << SHIFT[i++ & 3]; - } else { - code = 65536 + ((code & 1023) << 10 | message.charCodeAt(++index2) & 1023); - blocks2[i >> 2] |= (240 | code >> 18) << SHIFT[i++ & 3]; - blocks2[i >> 2] |= (128 | code >> 12 & 63) << SHIFT[i++ & 3]; - blocks2[i >> 2] |= (128 | code >> 6 & 63) << SHIFT[i++ & 3]; - blocks2[i >> 2] |= (128 | code & 63) << SHIFT[i++ & 3]; - } - } - } - this.lastByteIndex = i; - this.bytes += i - this.start; - if (i >= 64) { - this.block = blocks2[16]; - this.start = i - 64; - this.hash(); - this.hashed = true; - } else { - this.start = i; - } - } - if (this.bytes > 4294967295) { - this.hBytes += this.bytes / 4294967296 << 0; - this.bytes = this.bytes % 4294967296; - } - return this; - }; - Sha256.prototype.finalize = function() { - if (this.finalized) { - return; - } - this.finalized = true; - var blocks2 = this.blocks, i = this.lastByteIndex; - blocks2[16] = this.block; - blocks2[i >> 2] |= EXTRA[i & 3]; - this.block = blocks2[16]; - if (i >= 56) { - if (!this.hashed) { - this.hash(); - } - blocks2[0] = this.block; - blocks2[16] = blocks2[1] = blocks2[2] = blocks2[3] = blocks2[4] = blocks2[5] = blocks2[6] = blocks2[7] = blocks2[8] = blocks2[9] = blocks2[10] = blocks2[11] = blocks2[12] = blocks2[13] = blocks2[14] = blocks2[15] = 0; - } - blocks2[14] = this.hBytes << 3 | this.bytes >>> 29; - blocks2[15] = this.bytes << 3; - this.hash(); - }; - Sha256.prototype.hash = function() { - var a = this.h0, b = this.h1, c = this.h2, d = this.h3, e = this.h4, f = this.h5, g = this.h6, h = this.h7, blocks2 = this.blocks, j, s0, s1, maj, t1, t2, ch, ab, da, cd, bc; - for (j = 16; j < 64; ++j) { - t1 = blocks2[j - 15]; - s0 = (t1 >>> 7 | t1 << 25) ^ (t1 >>> 18 | t1 << 14) ^ t1 >>> 3; - t1 = blocks2[j - 2]; - s1 = (t1 >>> 17 | t1 << 15) ^ (t1 >>> 19 | t1 << 13) ^ t1 >>> 10; - blocks2[j] = blocks2[j - 16] + s0 + blocks2[j - 7] + s1 << 0; - } - bc = b & c; - for (j = 0; j < 64; j += 4) { - if (this.first) { - if (this.is224) { - ab = 300032; - t1 = blocks2[0] - 1413257819; - h = t1 - 150054599 << 0; - d = t1 + 24177077 << 0; - } else { - ab = 704751109; - t1 = blocks2[0] - 210244248; - h = t1 - 1521486534 << 0; - d = t1 + 143694565 << 0; - } - this.first = false; - } else { - s0 = (a >>> 2 | a << 30) ^ (a >>> 13 | a << 19) ^ (a >>> 22 | a << 10); - s1 = (e >>> 6 | e << 26) ^ (e >>> 11 | e << 21) ^ (e >>> 25 | e << 7); - ab = a & b; - maj = ab ^ a & c ^ bc; - ch = e & f ^ ~e & g; - t1 = h + s1 + ch + K[j] + blocks2[j]; - t2 = s0 + maj; - h = d + t1 << 0; - d = t1 + t2 << 0; - } - s0 = (d >>> 2 | d << 30) ^ (d >>> 13 | d << 19) ^ (d >>> 22 | d << 10); - s1 = (h >>> 6 | h << 26) ^ (h >>> 11 | h << 21) ^ (h >>> 25 | h << 7); - da = d & a; - maj = da ^ d & b ^ ab; - ch = h & e ^ ~h & f; - t1 = g + s1 + ch + K[j + 1] + blocks2[j + 1]; - t2 = s0 + maj; - g = c + t1 << 0; - c = t1 + t2 << 0; - s0 = (c >>> 2 | c << 30) ^ (c >>> 13 | c << 19) ^ (c >>> 22 | c << 10); - s1 = (g >>> 6 | g << 26) ^ (g >>> 11 | g << 21) ^ (g >>> 25 | g << 7); - cd = c & d; - maj = cd ^ c & a ^ da; - ch = g & h ^ ~g & e; - t1 = f + s1 + ch + K[j + 2] + blocks2[j + 2]; - t2 = s0 + maj; - f = b + t1 << 0; - b = t1 + t2 << 0; - s0 = (b >>> 2 | b << 30) ^ (b >>> 13 | b << 19) ^ (b >>> 22 | b << 10); - s1 = (f >>> 6 | f << 26) ^ (f >>> 11 | f << 21) ^ (f >>> 25 | f << 7); - bc = b & c; - maj = bc ^ b & d ^ cd; - ch = f & g ^ ~f & h; - t1 = e + s1 + ch + K[j + 3] + blocks2[j + 3]; - t2 = s0 + maj; - e = a + t1 << 0; - a = t1 + t2 << 0; - } - this.h0 = this.h0 + a << 0; - this.h1 = this.h1 + b << 0; - this.h2 = this.h2 + c << 0; - this.h3 = this.h3 + d << 0; - this.h4 = this.h4 + e << 0; - this.h5 = this.h5 + f << 0; - this.h6 = this.h6 + g << 0; - this.h7 = this.h7 + h << 0; - }; - Sha256.prototype.hex = function() { - this.finalize(); - var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3, h4 = this.h4, h5 = this.h5, h6 = this.h6, h7 = this.h7; - var hex = HEX_CHARS[h0 >> 28 & 15] + HEX_CHARS[h0 >> 24 & 15] + HEX_CHARS[h0 >> 20 & 15] + HEX_CHARS[h0 >> 16 & 15] + HEX_CHARS[h0 >> 12 & 15] + HEX_CHARS[h0 >> 8 & 15] + HEX_CHARS[h0 >> 4 & 15] + HEX_CHARS[h0 & 15] + HEX_CHARS[h1 >> 28 & 15] + HEX_CHARS[h1 >> 24 & 15] + HEX_CHARS[h1 >> 20 & 15] + HEX_CHARS[h1 >> 16 & 15] + HEX_CHARS[h1 >> 12 & 15] + HEX_CHARS[h1 >> 8 & 15] + HEX_CHARS[h1 >> 4 & 15] + HEX_CHARS[h1 & 15] + HEX_CHARS[h2 >> 28 & 15] + HEX_CHARS[h2 >> 24 & 15] + HEX_CHARS[h2 >> 20 & 15] + HEX_CHARS[h2 >> 16 & 15] + HEX_CHARS[h2 >> 12 & 15] + HEX_CHARS[h2 >> 8 & 15] + HEX_CHARS[h2 >> 4 & 15] + HEX_CHARS[h2 & 15] + HEX_CHARS[h3 >> 28 & 15] + HEX_CHARS[h3 >> 24 & 15] + HEX_CHARS[h3 >> 20 & 15] + HEX_CHARS[h3 >> 16 & 15] + HEX_CHARS[h3 >> 12 & 15] + HEX_CHARS[h3 >> 8 & 15] + HEX_CHARS[h3 >> 4 & 15] + HEX_CHARS[h3 & 15] + HEX_CHARS[h4 >> 28 & 15] + HEX_CHARS[h4 >> 24 & 15] + HEX_CHARS[h4 >> 20 & 15] + HEX_CHARS[h4 >> 16 & 15] + HEX_CHARS[h4 >> 12 & 15] + HEX_CHARS[h4 >> 8 & 15] + HEX_CHARS[h4 >> 4 & 15] + HEX_CHARS[h4 & 15] + HEX_CHARS[h5 >> 28 & 15] + HEX_CHARS[h5 >> 24 & 15] + HEX_CHARS[h5 >> 20 & 15] + HEX_CHARS[h5 >> 16 & 15] + HEX_CHARS[h5 >> 12 & 15] + HEX_CHARS[h5 >> 8 & 15] + HEX_CHARS[h5 >> 4 & 15] + HEX_CHARS[h5 & 15] + HEX_CHARS[h6 >> 28 & 15] + HEX_CHARS[h6 >> 24 & 15] + HEX_CHARS[h6 >> 20 & 15] + HEX_CHARS[h6 >> 16 & 15] + HEX_CHARS[h6 >> 12 & 15] + HEX_CHARS[h6 >> 8 & 15] + HEX_CHARS[h6 >> 4 & 15] + HEX_CHARS[h6 & 15]; - if (!this.is224) { - hex += HEX_CHARS[h7 >> 28 & 15] + HEX_CHARS[h7 >> 24 & 15] + HEX_CHARS[h7 >> 20 & 15] + HEX_CHARS[h7 >> 16 & 15] + HEX_CHARS[h7 >> 12 & 15] + HEX_CHARS[h7 >> 8 & 15] + HEX_CHARS[h7 >> 4 & 15] + HEX_CHARS[h7 & 15]; - } - return hex; - }; - Sha256.prototype.toString = Sha256.prototype.hex; - Sha256.prototype.digest = function() { - this.finalize(); - var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3, h4 = this.h4, h5 = this.h5, h6 = this.h6, h7 = this.h7; - var arr = [ - h0 >> 24 & 255, - h0 >> 16 & 255, - h0 >> 8 & 255, - h0 & 255, - h1 >> 24 & 255, - h1 >> 16 & 255, - h1 >> 8 & 255, - h1 & 255, - h2 >> 24 & 255, - h2 >> 16 & 255, - h2 >> 8 & 255, - h2 & 255, - h3 >> 24 & 255, - h3 >> 16 & 255, - h3 >> 8 & 255, - h3 & 255, - h4 >> 24 & 255, - h4 >> 16 & 255, - h4 >> 8 & 255, - h4 & 255, - h5 >> 24 & 255, - h5 >> 16 & 255, - h5 >> 8 & 255, - h5 & 255, - h6 >> 24 & 255, - h6 >> 16 & 255, - h6 >> 8 & 255, - h6 & 255 - ]; - if (!this.is224) { - arr.push(h7 >> 24 & 255, h7 >> 16 & 255, h7 >> 8 & 255, h7 & 255); - } - return arr; - }; - Sha256.prototype.array = Sha256.prototype.digest; - Sha256.prototype.arrayBuffer = function() { - this.finalize(); - var buffer2 = new ArrayBuffer(this.is224 ? 28 : 32); - var dataView = new DataView(buffer2); - dataView.setUint32(0, this.h0); - dataView.setUint32(4, this.h1); - dataView.setUint32(8, this.h2); - dataView.setUint32(12, this.h3); - dataView.setUint32(16, this.h4); - dataView.setUint32(20, this.h5); - dataView.setUint32(24, this.h6); - if (!this.is224) { - dataView.setUint32(28, this.h7); - } - return buffer2; - }; - function HmacSha256(key2, is2242, sharedMemory) { - var i, type = typeof key2; - if (type === "string") { - var bytes = [], length = key2.length, index2 = 0, code; - for (i = 0; i < length; ++i) { - code = key2.charCodeAt(i); - if (code < 128) { - bytes[index2++] = code; - } else if (code < 2048) { - bytes[index2++] = 192 | code >> 6; - bytes[index2++] = 128 | code & 63; - } else if (code < 55296 || code >= 57344) { - bytes[index2++] = 224 | code >> 12; - bytes[index2++] = 128 | code >> 6 & 63; - bytes[index2++] = 128 | code & 63; - } else { - code = 65536 + ((code & 1023) << 10 | key2.charCodeAt(++i) & 1023); - bytes[index2++] = 240 | code >> 18; - bytes[index2++] = 128 | code >> 12 & 63; - bytes[index2++] = 128 | code >> 6 & 63; - bytes[index2++] = 128 | code & 63; - } - } - key2 = bytes; - } else { - if (type === "object") { - if (key2 === null) { - throw new Error(ERROR); - } else if (ARRAY_BUFFER && key2.constructor === ArrayBuffer) { - key2 = new Uint8Array(key2); - } else if (!Array.isArray(key2)) { - if (!ARRAY_BUFFER || !ArrayBuffer.isView(key2)) { - throw new Error(ERROR); - } - } - } else { - throw new Error(ERROR); - } - } - if (key2.length > 64) { - key2 = new Sha256(is2242, true).update(key2).array(); - } - var oKeyPad = [], iKeyPad = []; - for (i = 0; i < 64; ++i) { - var b = key2[i] || 0; - oKeyPad[i] = 92 ^ b; - iKeyPad[i] = 54 ^ b; - } - Sha256.call(this, is2242, sharedMemory); - this.update(iKeyPad); - this.oKeyPad = oKeyPad; - this.inner = true; - this.sharedMemory = sharedMemory; - } - HmacSha256.prototype = new Sha256(); - HmacSha256.prototype.finalize = function() { - Sha256.prototype.finalize.call(this); - if (this.inner) { - this.inner = false; - var innerHash = this.array(); - Sha256.call(this, this.is224, this.sharedMemory); - this.update(this.oKeyPad); - this.update(innerHash); - Sha256.prototype.finalize.call(this); - } - }; - var exports = createMethod(); - exports.sha256 = exports; - exports.sha224 = createMethod(true); - exports.sha256.hmac = createHmacMethod(); - exports.sha224.hmac = createHmacMethod(true); - if (COMMON_JS) { - module.exports = exports; - } else { - root.sha256 = exports.sha256; - root.sha224 = exports.sha224; - if (AMD) { - define(function() { - return exports; - }); - } - } - })(); - } -}); - -// node_modules/.pnpm/hogan.js@3.0.2/node_modules/hogan.js/lib/compiler.js -var require_compiler = __commonJS({ - "node_modules/.pnpm/hogan.js@3.0.2/node_modules/hogan.js/lib/compiler.js"(exports2) { - init_polyfill_buffer(); - (function(Hogan4) { - var rIsWhitespace = /\S/, rQuot = /\"/g, rNewline = /\n/g, rCr = /\r/g, rSlash = /\\/g, rLineSep = /\u2028/, rParagraphSep = /\u2029/; - Hogan4.tags = { - "#": 1, - "^": 2, - "<": 3, - "$": 4, - "/": 5, - "!": 6, - ">": 7, - "=": 8, - "_v": 9, - "{": 10, - "&": 11, - "_t": 12 - }; - Hogan4.scan = function scan(text2, delimiters) { - var len = text2.length, IN_TEXT = 0, IN_TAG_TYPE = 1, IN_TAG = 2, state = IN_TEXT, tagType = null, tag2 = null, buf = "", tokens = [], seenTag = false, i = 0, lineStart = 0, otag = "{{", ctag = "}}"; - function addBuf() { - if (buf.length > 0) { - tokens.push({ tag: "_t", text: new String(buf) }); - buf = ""; - } - } - function lineIsWhitespace() { - var isAllWhitespace = true; - for (var j = lineStart; j < tokens.length; j++) { - isAllWhitespace = Hogan4.tags[tokens[j].tag] < Hogan4.tags["_v"] || tokens[j].tag == "_t" && tokens[j].text.match(rIsWhitespace) === null; - if (!isAllWhitespace) { - return false; - } - } - return isAllWhitespace; - } - function filterLine(haveSeenTag, noNewLine) { - addBuf(); - if (haveSeenTag && lineIsWhitespace()) { - for (var j = lineStart, next; j < tokens.length; j++) { - if (tokens[j].text) { - if ((next = tokens[j + 1]) && next.tag == ">") { - next.indent = tokens[j].text.toString(); - } - tokens.splice(j, 1); - } - } - } else if (!noNewLine) { - tokens.push({ tag: "\n" }); - } - seenTag = false; - lineStart = tokens.length; - } - function changeDelimiters(text3, index2) { - var close = "=" + ctag, closeIndex = text3.indexOf(close, index2), delimiters2 = trim( - text3.substring(text3.indexOf("=", index2) + 1, closeIndex) - ).split(" "); - otag = delimiters2[0]; - ctag = delimiters2[delimiters2.length - 1]; - return closeIndex + close.length - 1; - } - if (delimiters) { - delimiters = delimiters.split(" "); - otag = delimiters[0]; - ctag = delimiters[1]; - } - for (i = 0; i < len; i++) { - if (state == IN_TEXT) { - if (tagChange(otag, text2, i)) { - --i; - addBuf(); - state = IN_TAG_TYPE; - } else { - if (text2.charAt(i) == "\n") { - filterLine(seenTag); - } else { - buf += text2.charAt(i); - } - } - } else if (state == IN_TAG_TYPE) { - i += otag.length - 1; - tag2 = Hogan4.tags[text2.charAt(i + 1)]; - tagType = tag2 ? text2.charAt(i + 1) : "_v"; - if (tagType == "=") { - i = changeDelimiters(text2, i); - state = IN_TEXT; - } else { - if (tag2) { - i++; - } - state = IN_TAG; - } - seenTag = i; - } else { - if (tagChange(ctag, text2, i)) { - tokens.push({ - tag: tagType, - n: trim(buf), - otag, - ctag, - i: tagType == "/" ? seenTag - otag.length : i + ctag.length - }); - buf = ""; - i += ctag.length - 1; - state = IN_TEXT; - if (tagType == "{") { - if (ctag == "}}") { - i++; - } else { - cleanTripleStache(tokens[tokens.length - 1]); - } - } - } else { - buf += text2.charAt(i); - } - } - } - filterLine(seenTag, true); - return tokens; - }; - function cleanTripleStache(token) { - if (token.n.substr(token.n.length - 1) === "}") { - token.n = token.n.substring(0, token.n.length - 1); - } - } - function trim(s) { - if (s.trim) { - return s.trim(); - } - return s.replace(/^\s*|\s*$/g, ""); - } - function tagChange(tag2, text2, index2) { - if (text2.charAt(index2) != tag2.charAt(0)) { - return false; - } - for (var i = 1, l = tag2.length; i < l; i++) { - if (text2.charAt(index2 + i) != tag2.charAt(i)) { - return false; - } - } - return true; - } - var allowedInSuper = { "_t": true, "\n": true, "$": true, "/": true }; - function buildTree(tokens, kind, stack, customTags) { - var instructions = [], opener = null, tail = null, token = null; - tail = stack[stack.length - 1]; - while (tokens.length > 0) { - token = tokens.shift(); - if (tail && tail.tag == "<" && !(token.tag in allowedInSuper)) { - throw new Error("Illegal content in < super tag."); - } - if (Hogan4.tags[token.tag] <= Hogan4.tags["$"] || isOpener(token, customTags)) { - stack.push(token); - token.nodes = buildTree(tokens, token.tag, stack, customTags); - } else if (token.tag == "/") { - if (stack.length === 0) { - throw new Error("Closing tag without opener: /" + token.n); - } - opener = stack.pop(); - if (token.n != opener.n && !isCloser(token.n, opener.n, customTags)) { - throw new Error("Nesting error: " + opener.n + " vs. " + token.n); - } - opener.end = token.i; - return instructions; - } else if (token.tag == "\n") { - token.last = tokens.length == 0 || tokens[0].tag == "\n"; - } - instructions.push(token); - } - if (stack.length > 0) { - throw new Error("missing closing tag: " + stack.pop().n); - } - return instructions; - } - function isOpener(token, tags) { - for (var i = 0, l = tags.length; i < l; i++) { - if (tags[i].o == token.n) { - token.tag = "#"; - return true; - } - } - } - function isCloser(close, open, tags) { - for (var i = 0, l = tags.length; i < l; i++) { - if (tags[i].c == close && tags[i].o == open) { - return true; - } - } - } - function stringifySubstitutions(obj) { - var items = []; - for (var key2 in obj) { - items.push('"' + esc(key2) + '": function(c,p,t,i) {' + obj[key2] + "}"); - } - return "{ " + items.join(",") + " }"; - } - function stringifyPartials(codeObj) { - var partials = []; - for (var key2 in codeObj.partials) { - partials.push('"' + esc(key2) + '":{name:"' + esc(codeObj.partials[key2].name) + '", ' + stringifyPartials(codeObj.partials[key2]) + "}"); - } - return "partials: {" + partials.join(",") + "}, subs: " + stringifySubstitutions(codeObj.subs); - } - Hogan4.stringify = function(codeObj, text2, options) { - return "{code: function (c,p,i) { " + Hogan4.wrapMain(codeObj.code) + " }," + stringifyPartials(codeObj) + "}"; - }; - var serialNo = 0; - Hogan4.generate = function(tree, text2, options) { - serialNo = 0; - var context = { code: "", subs: {}, partials: {} }; - Hogan4.walk(tree, context); - if (options.asString) { - return this.stringify(context, text2, options); - } - return this.makeTemplate(context, text2, options); - }; - Hogan4.wrapMain = function(code) { - return 'var t=this;t.b(i=i||"");' + code + "return t.fl();"; - }; - Hogan4.template = Hogan4.Template; - Hogan4.makeTemplate = function(codeObj, text2, options) { - var template = this.makePartials(codeObj); - template.code = new Function("c", "p", "i", this.wrapMain(codeObj.code)); - return new this.template(template, text2, this, options); - }; - Hogan4.makePartials = function(codeObj) { - var key2, template = { subs: {}, partials: codeObj.partials, name: codeObj.name }; - for (key2 in template.partials) { - template.partials[key2] = this.makePartials(template.partials[key2]); - } - for (key2 in codeObj.subs) { - template.subs[key2] = new Function("c", "p", "t", "i", codeObj.subs[key2]); - } - return template; - }; - function esc(s) { - return s.replace(rSlash, "\\\\").replace(rQuot, '\\"').replace(rNewline, "\\n").replace(rCr, "\\r").replace(rLineSep, "\\u2028").replace(rParagraphSep, "\\u2029"); - } - function chooseMethod(s) { - return ~s.indexOf(".") ? "d" : "f"; - } - function createPartial(node, context) { - var prefix = "<" + (context.prefix || ""); - var sym = prefix + node.n + serialNo++; - context.partials[sym] = { name: node.n, partials: {} }; - context.code += 't.b(t.rp("' + esc(sym) + '",c,p,"' + (node.indent || "") + '"));'; - return sym; - } - Hogan4.codegen = { - "#": function(node, context) { - context.code += "if(t.s(t." + chooseMethod(node.n) + '("' + esc(node.n) + '",c,p,1),c,p,0,' + node.i + "," + node.end + ',"' + node.otag + " " + node.ctag + '")){t.rs(c,p,function(c,p,t){'; - Hogan4.walk(node.nodes, context); - context.code += "});c.pop();}"; - }, - "^": function(node, context) { - context.code += "if(!t.s(t." + chooseMethod(node.n) + '("' + esc(node.n) + '",c,p,1),c,p,1,0,0,"")){'; - Hogan4.walk(node.nodes, context); - context.code += "};"; - }, - ">": createPartial, - "<": function(node, context) { - var ctx = { partials: {}, code: "", subs: {}, inPartial: true }; - Hogan4.walk(node.nodes, ctx); - var template = context.partials[createPartial(node, context)]; - template.subs = ctx.subs; - template.partials = ctx.partials; - }, - "$": function(node, context) { - var ctx = { subs: {}, code: "", partials: context.partials, prefix: node.n }; - Hogan4.walk(node.nodes, ctx); - context.subs[node.n] = ctx.code; - if (!context.inPartial) { - context.code += 't.sub("' + esc(node.n) + '",c,p,i);'; - } - }, - "\n": function(node, context) { - context.code += write('"\\n"' + (node.last ? "" : " + i")); - }, - "_v": function(node, context) { - context.code += "t.b(t.v(t." + chooseMethod(node.n) + '("' + esc(node.n) + '",c,p,0)));'; - }, - "_t": function(node, context) { - context.code += write('"' + esc(node.text) + '"'); - }, - "{": tripleStache, - "&": tripleStache - }; - function tripleStache(node, context) { - context.code += "t.b(t.t(t." + chooseMethod(node.n) + '("' + esc(node.n) + '",c,p,0)));'; - } - function write(s) { - return "t.b(" + s + ");"; - } - Hogan4.walk = function(nodelist, context) { - var func; - for (var i = 0, l = nodelist.length; i < l; i++) { - func = Hogan4.codegen[nodelist[i].tag]; - func && func(nodelist[i], context); - } - return context; - }; - Hogan4.parse = function(tokens, text2, options) { - options = options || {}; - return buildTree(tokens, "", [], options.sectionTags || []); - }; - Hogan4.cache = {}; - Hogan4.cacheKey = function(text2, options) { - return [text2, !!options.asString, !!options.disableLambda, options.delimiters, !!options.modelGet].join("||"); - }; - Hogan4.compile = function(text2, options) { - options = options || {}; - var key2 = Hogan4.cacheKey(text2, options); - var template = this.cache[key2]; - if (template) { - var partials = template.partials; - for (var name in partials) { - delete partials[name].instance; - } - return template; - } - template = this.generate(this.parse(this.scan(text2, options.delimiters), text2, options), text2, options); - return this.cache[key2] = template; - }; - })(typeof exports2 !== "undefined" ? exports2 : Hogan); - } -}); - -// node_modules/.pnpm/hogan.js@3.0.2/node_modules/hogan.js/lib/template.js -var require_template = __commonJS({ - "node_modules/.pnpm/hogan.js@3.0.2/node_modules/hogan.js/lib/template.js"(exports2) { - init_polyfill_buffer(); - var Hogan4 = {}; - (function(Hogan5) { - Hogan5.Template = function(codeObj, text2, compiler, options) { - codeObj = codeObj || {}; - this.r = codeObj.code || this.r; - this.c = compiler; - this.options = options || {}; - this.text = text2 || ""; - this.partials = codeObj.partials || {}; - this.subs = codeObj.subs || {}; - this.buf = ""; - }; - Hogan5.Template.prototype = { - // render: replaced by generated code. - r: function(context, partials, indent2) { - return ""; - }, - // variable escaping - v: hoganEscape, - // triple stache - t: coerceToString, - render: function render(context, partials, indent2) { - return this.ri([context], partials || {}, indent2); - }, - // render internal -- a hook for overrides that catches partials too - ri: function(context, partials, indent2) { - return this.r(context, partials, indent2); - }, - // ensurePartial - ep: function(symbol, partials) { - var partial = this.partials[symbol]; - var template = partials[partial.name]; - if (partial.instance && partial.base == template) { - return partial.instance; - } - if (typeof template == "string") { - if (!this.c) { - throw new Error("No compiler available."); - } - template = this.c.compile(template, this.options); - } - if (!template) { - return null; - } - this.partials[symbol].base = template; - if (partial.subs) { - if (!partials.stackText) - partials.stackText = {}; - for (key in partial.subs) { - if (!partials.stackText[key]) { - partials.stackText[key] = this.activeSub !== void 0 && partials.stackText[this.activeSub] ? partials.stackText[this.activeSub] : this.text; - } - } - template = createSpecializedPartial( - template, - partial.subs, - partial.partials, - this.stackSubs, - this.stackPartials, - partials.stackText - ); - } - this.partials[symbol].instance = template; - return template; - }, - // tries to find a partial in the current scope and render it - rp: function(symbol, context, partials, indent2) { - var partial = this.ep(symbol, partials); - if (!partial) { - return ""; - } - return partial.ri(context, partials, indent2); - }, - // render a section - rs: function(context, partials, section) { - var tail = context[context.length - 1]; - if (!isArray(tail)) { - section(context, partials, this); - return; - } - for (var i = 0; i < tail.length; i++) { - context.push(tail[i]); - section(context, partials, this); - context.pop(); - } - }, - // maybe start a section - s: function(val, ctx, partials, inverted, start, end, tags) { - var pass; - if (isArray(val) && val.length === 0) { - return false; - } - if (typeof val == "function") { - val = this.ms(val, ctx, partials, inverted, start, end, tags); - } - pass = !!val; - if (!inverted && pass && ctx) { - ctx.push(typeof val == "object" ? val : ctx[ctx.length - 1]); - } - return pass; - }, - // find values with dotted names - d: function(key2, ctx, partials, returnFound) { - var found, names = key2.split("."), val = this.f(names[0], ctx, partials, returnFound), doModelGet = this.options.modelGet, cx = null; - if (key2 === "." && isArray(ctx[ctx.length - 2])) { - val = ctx[ctx.length - 1]; - } else { - for (var i = 1; i < names.length; i++) { - found = findInScope(names[i], val, doModelGet); - if (found !== void 0) { - cx = val; - val = found; - } else { - val = ""; - } - } - } - if (returnFound && !val) { - return false; - } - if (!returnFound && typeof val == "function") { - ctx.push(cx); - val = this.mv(val, ctx, partials); - ctx.pop(); - } - return val; - }, - // find values with normal names - f: function(key2, ctx, partials, returnFound) { - var val = false, v = null, found = false, doModelGet = this.options.modelGet; - for (var i = ctx.length - 1; i >= 0; i--) { - v = ctx[i]; - val = findInScope(key2, v, doModelGet); - if (val !== void 0) { - found = true; - break; - } - } - if (!found) { - return returnFound ? false : ""; - } - if (!returnFound && typeof val == "function") { - val = this.mv(val, ctx, partials); - } - return val; - }, - // higher order templates - ls: function(func, cx, partials, text2, tags) { - var oldTags = this.options.delimiters; - this.options.delimiters = tags; - this.b(this.ct(coerceToString(func.call(cx, text2)), cx, partials)); - this.options.delimiters = oldTags; - return false; - }, - // compile text - ct: function(text2, cx, partials) { - if (this.options.disableLambda) { - throw new Error("Lambda features disabled."); - } - return this.c.compile(text2, this.options).render(cx, partials); - }, - // template result buffering - b: function(s) { - this.buf += s; - }, - fl: function() { - var r = this.buf; - this.buf = ""; - return r; - }, - // method replace section - ms: function(func, ctx, partials, inverted, start, end, tags) { - var textSource, cx = ctx[ctx.length - 1], result = func.call(cx); - if (typeof result == "function") { - if (inverted) { - return true; - } else { - textSource = this.activeSub && this.subsText && this.subsText[this.activeSub] ? this.subsText[this.activeSub] : this.text; - return this.ls(result, cx, partials, textSource.substring(start, end), tags); - } - } - return result; - }, - // method replace variable - mv: function(func, ctx, partials) { - var cx = ctx[ctx.length - 1]; - var result = func.call(cx); - if (typeof result == "function") { - return this.ct(coerceToString(result.call(cx)), cx, partials); - } - return result; - }, - sub: function(name, context, partials, indent2) { - var f = this.subs[name]; - if (f) { - this.activeSub = name; - f(context, partials, this, indent2); - this.activeSub = false; - } - } - }; - function findInScope(key2, scope, doModelGet) { - var val; - if (scope && typeof scope == "object") { - if (scope[key2] !== void 0) { - val = scope[key2]; - } else if (doModelGet && scope.get && typeof scope.get == "function") { - val = scope.get(key2); - } - } - return val; - } - function createSpecializedPartial(instance10, subs, partials, stackSubs, stackPartials, stackText) { - function PartialTemplate() { - } - ; - PartialTemplate.prototype = instance10; - function Substitutions() { - } - ; - Substitutions.prototype = instance10.subs; - var key2; - var partial = new PartialTemplate(); - partial.subs = new Substitutions(); - partial.subsText = {}; - partial.buf = ""; - stackSubs = stackSubs || {}; - partial.stackSubs = stackSubs; - partial.subsText = stackText; - for (key2 in subs) { - if (!stackSubs[key2]) - stackSubs[key2] = subs[key2]; - } - for (key2 in stackSubs) { - partial.subs[key2] = stackSubs[key2]; - } - stackPartials = stackPartials || {}; - partial.stackPartials = stackPartials; - for (key2 in partials) { - if (!stackPartials[key2]) - stackPartials[key2] = partials[key2]; - } - for (key2 in stackPartials) { - partial.partials[key2] = stackPartials[key2]; - } - return partial; - } - var rAmp = /&/g, rLt = //g, rApos = /\'/g, rQuot = /\"/g, hChars = /[&<>\"\']/; - function coerceToString(val) { - return String(val === null || val === void 0 ? "" : val); - } - function hoganEscape(str) { - str = coerceToString(str); - return hChars.test(str) ? str.replace(rAmp, "&").replace(rLt, "<").replace(rGt, ">").replace(rApos, "'").replace(rQuot, """) : str; - } - var isArray = Array.isArray || function(a) { - return Object.prototype.toString.call(a) === "[object Array]"; - }; - })(typeof exports2 !== "undefined" ? exports2 : Hogan4); - } -}); - -// node_modules/.pnpm/hogan.js@3.0.2/node_modules/hogan.js/lib/hogan.js -var require_hogan = __commonJS({ - "node_modules/.pnpm/hogan.js@3.0.2/node_modules/hogan.js/lib/hogan.js"(exports2, module2) { - init_polyfill_buffer(); - var Hogan4 = require_compiler(); - Hogan4.Template = require_template().Template; - Hogan4.template = Hogan4.Template; - module2.exports = Hogan4; - } -}); - -// node_modules/.pnpm/feather-icons@4.29.1/node_modules/feather-icons/dist/feather.js -var require_feather = __commonJS({ - "node_modules/.pnpm/feather-icons@4.29.1/node_modules/feather-icons/dist/feather.js"(exports2, module2) { - init_polyfill_buffer(); - (function webpackUniversalModuleDefinition(root2, factory) { - if (typeof exports2 === "object" && typeof module2 === "object") - module2.exports = factory(); - else if (typeof define === "function" && define.amd) - define([], factory); - else if (typeof exports2 === "object") - exports2["feather"] = factory(); - else - root2["feather"] = factory(); - })(typeof self !== "undefined" ? self : exports2, function() { - return ( - /******/ - function(modules) { - var installedModules = {}; - function __webpack_require__(moduleId) { - if (installedModules[moduleId]) { - return installedModules[moduleId].exports; - } - var module3 = installedModules[moduleId] = { - /******/ - i: moduleId, - /******/ - l: false, - /******/ - exports: {} - /******/ - }; - modules[moduleId].call(module3.exports, module3, module3.exports, __webpack_require__); - module3.l = true; - return module3.exports; - } - __webpack_require__.m = modules; - __webpack_require__.c = installedModules; - __webpack_require__.d = function(exports3, name, getter) { - if (!__webpack_require__.o(exports3, name)) { - Object.defineProperty(exports3, name, { - /******/ - configurable: false, - /******/ - enumerable: true, - /******/ - get: getter - /******/ - }); - } - }; - __webpack_require__.r = function(exports3) { - Object.defineProperty(exports3, "__esModule", { value: true }); - }; - __webpack_require__.n = function(module3) { - var getter = module3 && module3.__esModule ? ( - /******/ - function getDefault() { - return module3["default"]; - } - ) : ( - /******/ - function getModuleExports() { - return module3; - } - ); - __webpack_require__.d(getter, "a", getter); - return getter; - }; - __webpack_require__.o = function(object, property) { - return Object.prototype.hasOwnProperty.call(object, property); - }; - __webpack_require__.p = ""; - return __webpack_require__(__webpack_require__.s = 0); - }({ - /***/ - "./dist/icons.json": ( - /*!*************************!*\ - !*** ./dist/icons.json ***! - \*************************/ - /*! exports provided: activity, airplay, alert-circle, alert-octagon, alert-triangle, align-center, align-justify, align-left, align-right, anchor, aperture, archive, arrow-down-circle, arrow-down-left, arrow-down-right, arrow-down, arrow-left-circle, arrow-left, arrow-right-circle, arrow-right, arrow-up-circle, arrow-up-left, arrow-up-right, arrow-up, at-sign, award, bar-chart-2, bar-chart, battery-charging, battery, bell-off, bell, bluetooth, bold, book-open, book, bookmark, box, briefcase, calendar, camera-off, camera, cast, check-circle, check-square, check, chevron-down, chevron-left, chevron-right, chevron-up, chevrons-down, chevrons-left, chevrons-right, chevrons-up, chrome, circle, clipboard, clock, cloud-drizzle, cloud-lightning, cloud-off, cloud-rain, cloud-snow, cloud, code, codepen, codesandbox, coffee, columns, command, compass, copy, corner-down-left, corner-down-right, corner-left-down, corner-left-up, corner-right-down, corner-right-up, corner-up-left, corner-up-right, cpu, credit-card, crop, crosshair, database, delete, disc, divide-circle, divide-square, divide, dollar-sign, download-cloud, download, dribbble, droplet, edit-2, edit-3, edit, external-link, eye-off, eye, facebook, fast-forward, feather, figma, file-minus, file-plus, file-text, file, film, filter, flag, folder-minus, folder-plus, folder, framer, frown, gift, git-branch, git-commit, git-merge, git-pull-request, github, gitlab, globe, grid, hard-drive, hash, headphones, heart, help-circle, hexagon, home, image, inbox, info, instagram, italic, key, layers, layout, life-buoy, link-2, link, linkedin, list, loader, lock, log-in, log-out, mail, map-pin, map, maximize-2, maximize, meh, menu, message-circle, message-square, mic-off, mic, minimize-2, minimize, minus-circle, minus-square, minus, monitor, moon, more-horizontal, more-vertical, mouse-pointer, move, music, navigation-2, navigation, octagon, package, paperclip, pause-circle, pause, pen-tool, percent, phone-call, phone-forwarded, phone-incoming, phone-missed, phone-off, phone-outgoing, phone, pie-chart, play-circle, play, plus-circle, plus-square, plus, pocket, power, printer, radio, refresh-ccw, refresh-cw, repeat, rewind, rotate-ccw, rotate-cw, rss, save, scissors, search, send, server, settings, share-2, share, shield-off, shield, shopping-bag, shopping-cart, shuffle, sidebar, skip-back, skip-forward, slack, slash, sliders, smartphone, smile, speaker, square, star, stop-circle, sun, sunrise, sunset, table, tablet, tag, target, terminal, thermometer, thumbs-down, thumbs-up, toggle-left, toggle-right, tool, trash-2, trash, trello, trending-down, trending-up, triangle, truck, tv, twitch, twitter, type, umbrella, underline, unlock, upload-cloud, upload, user-check, user-minus, user-plus, user-x, user, users, video-off, video, voicemail, volume-1, volume-2, volume-x, volume, watch, wifi-off, wifi, wind, x-circle, x-octagon, x-square, x, youtube, zap-off, zap, zoom-in, zoom-out, default */ - /***/ - function(module3) { - module3.exports = { "activity": '', "airplay": '', "alert-circle": '', "alert-octagon": '', "alert-triangle": '', "align-center": '', "align-justify": '', "align-left": '', "align-right": '', "anchor": '', "aperture": '', "archive": '', "arrow-down-circle": '', "arrow-down-left": '', "arrow-down-right": '', "arrow-down": '', "arrow-left-circle": '', "arrow-left": '', "arrow-right-circle": '', "arrow-right": '', "arrow-up-circle": '', "arrow-up-left": '', "arrow-up-right": '', "arrow-up": '', "at-sign": '', "award": '', "bar-chart-2": '', "bar-chart": '', "battery-charging": '', "battery": '', "bell-off": '', "bell": '', "bluetooth": '', "bold": '', "book-open": '', "book": '', "bookmark": '', "box": '', "briefcase": '', "calendar": '', "camera-off": '', "camera": '', "cast": '', "check-circle": '', "check-square": '', "check": '', "chevron-down": '', "chevron-left": '', "chevron-right": '', "chevron-up": '', "chevrons-down": '', "chevrons-left": '', "chevrons-right": '', "chevrons-up": '', "chrome": '', "circle": '', "clipboard": '', "clock": '', "cloud-drizzle": '', "cloud-lightning": '', "cloud-off": '', "cloud-rain": '', "cloud-snow": '', "cloud": '', "code": '', "codepen": '', "codesandbox": '', "coffee": '', "columns": '', "command": '', "compass": '', "copy": '', "corner-down-left": '', "corner-down-right": '', "corner-left-down": '', "corner-left-up": '', "corner-right-down": '', "corner-right-up": '', "corner-up-left": '', "corner-up-right": '', "cpu": '', "credit-card": '', "crop": '', "crosshair": '', "database": '', "delete": '', "disc": '', "divide-circle": '', "divide-square": '', "divide": '', "dollar-sign": '', "download-cloud": '', "download": '', "dribbble": '', "droplet": '', "edit-2": '', "edit-3": '', "edit": '', "external-link": '', "eye-off": '', "eye": '', "facebook": '', "fast-forward": '', "feather": '', "figma": '', "file-minus": '', "file-plus": '', "file-text": '', "file": '', "film": '', "filter": '', "flag": '', "folder-minus": '', "folder-plus": '', "folder": '', "framer": '', "frown": '', "gift": '', "git-branch": '', "git-commit": '', "git-merge": '', "git-pull-request": '', "github": '', "gitlab": '', "globe": '', "grid": '', "hard-drive": '', "hash": '', "headphones": '', "heart": '', "help-circle": '', "hexagon": '', "home": '', "image": '', "inbox": '', "info": '', "instagram": '', "italic": '', "key": '', "layers": '', "layout": '', "life-buoy": '', "link-2": '', "link": '', "linkedin": '', "list": '', "loader": '', "lock": '', "log-in": '', "log-out": '', "mail": '', "map-pin": '', "map": '', "maximize-2": '', "maximize": '', "meh": '', "menu": '', "message-circle": '', "message-square": '', "mic-off": '', "mic": '', "minimize-2": '', "minimize": '', "minus-circle": '', "minus-square": '', "minus": '', "monitor": '', "moon": '', "more-horizontal": '', "more-vertical": '', "mouse-pointer": '', "move": '', "music": '', "navigation-2": '', "navigation": '', "octagon": '', "package": '', "paperclip": '', "pause-circle": '', "pause": '', "pen-tool": '', "percent": '', "phone-call": '', "phone-forwarded": '', "phone-incoming": '', "phone-missed": '', "phone-off": '', "phone-outgoing": '', "phone": '', "pie-chart": '', "play-circle": '', "play": '', "plus-circle": '', "plus-square": '', "plus": '', "pocket": '', "power": '', "printer": '', "radio": '', "refresh-ccw": '', "refresh-cw": '', "repeat": '', "rewind": '', "rotate-ccw": '', "rotate-cw": '', "rss": '', "save": '', "scissors": '', "search": '', "send": '', "server": '', "settings": '', "share-2": '', "share": '', "shield-off": '', "shield": '', "shopping-bag": '', "shopping-cart": '', "shuffle": '', "sidebar": '', "skip-back": '', "skip-forward": '', "slack": '', "slash": '', "sliders": '', "smartphone": '', "smile": '', "speaker": '', "square": '', "star": '', "stop-circle": '', "sun": '', "sunrise": '', "sunset": '', "table": '', "tablet": '', "tag": '', "target": '', "terminal": '', "thermometer": '', "thumbs-down": '', "thumbs-up": '', "toggle-left": '', "toggle-right": '', "tool": '', "trash-2": '', "trash": '', "trello": '', "trending-down": '', "trending-up": '', "triangle": '', "truck": '', "tv": '', "twitch": '', "twitter": '', "type": '', "umbrella": '', "underline": '', "unlock": '', "upload-cloud": '', "upload": '', "user-check": '', "user-minus": '', "user-plus": '', "user-x": '', "user": '', "users": '', "video-off": '', "video": '', "voicemail": '', "volume-1": '', "volume-2": '', "volume-x": '', "volume": '', "watch": '', "wifi-off": '', "wifi": '', "wind": '', "x-circle": '', "x-octagon": '', "x-square": '', "x": '', "youtube": '', "zap-off": '', "zap": '', "zoom-in": '', "zoom-out": '' }; - } - ), - /***/ - "./node_modules/classnames/dedupe.js": ( - /*!*******************************************!*\ - !*** ./node_modules/classnames/dedupe.js ***! - \*******************************************/ - /*! no static exports found */ - /***/ - function(module3, exports3, __webpack_require__) { - var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__; - (function() { - "use strict"; - var classNames = function() { - function StorageObject() { - } - StorageObject.prototype = /* @__PURE__ */ Object.create(null); - function _parseArray(resultSet, array) { - var length = array.length; - for (var i = 0; i < length; ++i) { - _parse(resultSet, array[i]); - } - } - var hasOwn = {}.hasOwnProperty; - function _parseNumber(resultSet, num2) { - resultSet[num2] = true; - } - function _parseObject(resultSet, object) { - for (var k in object) { - if (hasOwn.call(object, k)) { - resultSet[k] = !!object[k]; - } - } - } - var SPACE = /\s+/; - function _parseString(resultSet, str) { - var array = str.split(SPACE); - var length = array.length; - for (var i = 0; i < length; ++i) { - resultSet[array[i]] = true; - } - } - function _parse(resultSet, arg) { - if (!arg) - return; - var argType = typeof arg; - if (argType === "string") { - _parseString(resultSet, arg); - } else if (Array.isArray(arg)) { - _parseArray(resultSet, arg); - } else if (argType === "object") { - _parseObject(resultSet, arg); - } else if (argType === "number") { - _parseNumber(resultSet, arg); - } - } - function _classNames() { - var len = arguments.length; - var args = Array(len); - for (var i = 0; i < len; i++) { - args[i] = arguments[i]; - } - var classSet = new StorageObject(); - _parseArray(classSet, args); - var list = []; - for (var k in classSet) { - if (classSet[k]) { - list.push(k); - } - } - return list.join(" "); - } - return _classNames; - }(); - if (typeof module3 !== "undefined" && module3.exports) { - module3.exports = classNames; - } else if (true) { - !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function() { - return classNames; - }.apply(exports3, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== void 0 && (module3.exports = __WEBPACK_AMD_DEFINE_RESULT__)); - } else { - } - })(); - } - ), - /***/ - "./node_modules/core-js/es/array/from.js": ( - /*!***********************************************!*\ - !*** ./node_modules/core-js/es/array/from.js ***! - \***********************************************/ - /*! no static exports found */ - /***/ - function(module3, exports3, __webpack_require__) { - __webpack_require__( - /*! ../../modules/es.string.iterator */ - "./node_modules/core-js/modules/es.string.iterator.js" - ); - __webpack_require__( - /*! ../../modules/es.array.from */ - "./node_modules/core-js/modules/es.array.from.js" - ); - var path2 = __webpack_require__( - /*! ../../internals/path */ - "./node_modules/core-js/internals/path.js" - ); - module3.exports = path2.Array.from; - } - ), - /***/ - "./node_modules/core-js/internals/a-function.js": ( - /*!******************************************************!*\ - !*** ./node_modules/core-js/internals/a-function.js ***! - \******************************************************/ - /*! no static exports found */ - /***/ - function(module3, exports3) { - module3.exports = function(it) { - if (typeof it != "function") { - throw TypeError(String(it) + " is not a function"); - } - return it; - }; - } - ), - /***/ - "./node_modules/core-js/internals/an-object.js": ( - /*!*****************************************************!*\ - !*** ./node_modules/core-js/internals/an-object.js ***! - \*****************************************************/ - /*! no static exports found */ - /***/ - function(module3, exports3, __webpack_require__) { - var isObject2 = __webpack_require__( - /*! ../internals/is-object */ - "./node_modules/core-js/internals/is-object.js" - ); - module3.exports = function(it) { - if (!isObject2(it)) { - throw TypeError(String(it) + " is not an object"); - } - return it; - }; - } - ), - /***/ - "./node_modules/core-js/internals/array-from.js": ( - /*!******************************************************!*\ - !*** ./node_modules/core-js/internals/array-from.js ***! - \******************************************************/ - /*! no static exports found */ - /***/ - function(module3, exports3, __webpack_require__) { - "use strict"; - var bind = __webpack_require__( - /*! ../internals/bind-context */ - "./node_modules/core-js/internals/bind-context.js" - ); - var toObject = __webpack_require__( - /*! ../internals/to-object */ - "./node_modules/core-js/internals/to-object.js" - ); - var callWithSafeIterationClosing = __webpack_require__( - /*! ../internals/call-with-safe-iteration-closing */ - "./node_modules/core-js/internals/call-with-safe-iteration-closing.js" - ); - var isArrayIteratorMethod = __webpack_require__( - /*! ../internals/is-array-iterator-method */ - "./node_modules/core-js/internals/is-array-iterator-method.js" - ); - var toLength = __webpack_require__( - /*! ../internals/to-length */ - "./node_modules/core-js/internals/to-length.js" - ); - var createProperty = __webpack_require__( - /*! ../internals/create-property */ - "./node_modules/core-js/internals/create-property.js" - ); - var getIteratorMethod = __webpack_require__( - /*! ../internals/get-iterator-method */ - "./node_modules/core-js/internals/get-iterator-method.js" - ); - module3.exports = function from(arrayLike) { - var O = toObject(arrayLike); - var C = typeof this == "function" ? this : Array; - var argumentsLength = arguments.length; - var mapfn = argumentsLength > 1 ? arguments[1] : void 0; - var mapping = mapfn !== void 0; - var index2 = 0; - var iteratorMethod = getIteratorMethod(O); - var length, result, step, iterator; - if (mapping) - mapfn = bind(mapfn, argumentsLength > 2 ? arguments[2] : void 0, 2); - if (iteratorMethod != void 0 && !(C == Array && isArrayIteratorMethod(iteratorMethod))) { - iterator = iteratorMethod.call(O); - result = new C(); - for (; !(step = iterator.next()).done; index2++) { - createProperty( - result, - index2, - mapping ? callWithSafeIterationClosing(iterator, mapfn, [step.value, index2], true) : step.value - ); - } - } else { - length = toLength(O.length); - result = new C(length); - for (; length > index2; index2++) { - createProperty(result, index2, mapping ? mapfn(O[index2], index2) : O[index2]); - } - } - result.length = index2; - return result; - }; - } - ), - /***/ - "./node_modules/core-js/internals/array-includes.js": ( - /*!**********************************************************!*\ - !*** ./node_modules/core-js/internals/array-includes.js ***! - \**********************************************************/ - /*! no static exports found */ - /***/ - function(module3, exports3, __webpack_require__) { - var toIndexedObject = __webpack_require__( - /*! ../internals/to-indexed-object */ - "./node_modules/core-js/internals/to-indexed-object.js" - ); - var toLength = __webpack_require__( - /*! ../internals/to-length */ - "./node_modules/core-js/internals/to-length.js" - ); - var toAbsoluteIndex = __webpack_require__( - /*! ../internals/to-absolute-index */ - "./node_modules/core-js/internals/to-absolute-index.js" - ); - module3.exports = function(IS_INCLUDES) { - return function($this, el, fromIndex) { - var O = toIndexedObject($this); - var length = toLength(O.length); - var index2 = toAbsoluteIndex(fromIndex, length); - var value; - if (IS_INCLUDES && el != el) - while (length > index2) { - value = O[index2++]; - if (value != value) - return true; - } - else - for (; length > index2; index2++) - if (IS_INCLUDES || index2 in O) { - if (O[index2] === el) - return IS_INCLUDES || index2 || 0; - } - return !IS_INCLUDES && -1; - }; - }; - } - ), - /***/ - "./node_modules/core-js/internals/bind-context.js": ( - /*!********************************************************!*\ - !*** ./node_modules/core-js/internals/bind-context.js ***! - \********************************************************/ - /*! no static exports found */ - /***/ - function(module3, exports3, __webpack_require__) { - var aFunction = __webpack_require__( - /*! ../internals/a-function */ - "./node_modules/core-js/internals/a-function.js" - ); - module3.exports = function(fn, that, length) { - aFunction(fn); - if (that === void 0) - return fn; - switch (length) { - case 0: - return function() { - return fn.call(that); - }; - case 1: - return function(a) { - return fn.call(that, a); - }; - case 2: - return function(a, b) { - return fn.call(that, a, b); - }; - case 3: - return function(a, b, c) { - return fn.call(that, a, b, c); - }; - } - return function() { - return fn.apply(that, arguments); - }; - }; - } - ), - /***/ - "./node_modules/core-js/internals/call-with-safe-iteration-closing.js": ( - /*!****************************************************************************!*\ - !*** ./node_modules/core-js/internals/call-with-safe-iteration-closing.js ***! - \****************************************************************************/ - /*! no static exports found */ - /***/ - function(module3, exports3, __webpack_require__) { - var anObject = __webpack_require__( - /*! ../internals/an-object */ - "./node_modules/core-js/internals/an-object.js" - ); - module3.exports = function(iterator, fn, value, ENTRIES) { - try { - return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value); - } catch (error) { - var returnMethod = iterator["return"]; - if (returnMethod !== void 0) - anObject(returnMethod.call(iterator)); - throw error; - } - }; - } - ), - /***/ - "./node_modules/core-js/internals/check-correctness-of-iteration.js": ( - /*!**************************************************************************!*\ - !*** ./node_modules/core-js/internals/check-correctness-of-iteration.js ***! - \**************************************************************************/ - /*! no static exports found */ - /***/ - function(module3, exports3, __webpack_require__) { - var wellKnownSymbol = __webpack_require__( - /*! ../internals/well-known-symbol */ - "./node_modules/core-js/internals/well-known-symbol.js" - ); - var ITERATOR = wellKnownSymbol("iterator"); - var SAFE_CLOSING = false; - try { - var called = 0; - var iteratorWithReturn = { - next: function() { - return { done: !!called++ }; - }, - "return": function() { - SAFE_CLOSING = true; - } - }; - iteratorWithReturn[ITERATOR] = function() { - return this; - }; - Array.from(iteratorWithReturn, function() { - throw 2; - }); - } catch (error) { - } - module3.exports = function(exec, SKIP_CLOSING) { - if (!SKIP_CLOSING && !SAFE_CLOSING) - return false; - var ITERATION_SUPPORT = false; - try { - var object = {}; - object[ITERATOR] = function() { - return { - next: function() { - return { done: ITERATION_SUPPORT = true }; - } - }; - }; - exec(object); - } catch (error) { - } - return ITERATION_SUPPORT; - }; - } - ), - /***/ - "./node_modules/core-js/internals/classof-raw.js": ( - /*!*******************************************************!*\ - !*** ./node_modules/core-js/internals/classof-raw.js ***! - \*******************************************************/ - /*! no static exports found */ - /***/ - function(module3, exports3) { - var toString = {}.toString; - module3.exports = function(it) { - return toString.call(it).slice(8, -1); - }; - } - ), - /***/ - "./node_modules/core-js/internals/classof.js": ( - /*!***************************************************!*\ - !*** ./node_modules/core-js/internals/classof.js ***! - \***************************************************/ - /*! no static exports found */ - /***/ - function(module3, exports3, __webpack_require__) { - var classofRaw = __webpack_require__( - /*! ../internals/classof-raw */ - "./node_modules/core-js/internals/classof-raw.js" - ); - var wellKnownSymbol = __webpack_require__( - /*! ../internals/well-known-symbol */ - "./node_modules/core-js/internals/well-known-symbol.js" - ); - var TO_STRING_TAG = wellKnownSymbol("toStringTag"); - var CORRECT_ARGUMENTS = classofRaw(/* @__PURE__ */ function() { - return arguments; - }()) == "Arguments"; - var tryGet = function(it, key2) { - try { - return it[key2]; - } catch (error) { - } - }; - module3.exports = function(it) { - var O, tag2, result; - return it === void 0 ? "Undefined" : it === null ? "Null" : typeof (tag2 = tryGet(O = Object(it), TO_STRING_TAG)) == "string" ? tag2 : CORRECT_ARGUMENTS ? classofRaw(O) : (result = classofRaw(O)) == "Object" && typeof O.callee == "function" ? "Arguments" : result; - }; - } - ), - /***/ - "./node_modules/core-js/internals/copy-constructor-properties.js": ( - /*!***********************************************************************!*\ - !*** ./node_modules/core-js/internals/copy-constructor-properties.js ***! - \***********************************************************************/ - /*! no static exports found */ - /***/ - function(module3, exports3, __webpack_require__) { - var has = __webpack_require__( - /*! ../internals/has */ - "./node_modules/core-js/internals/has.js" - ); - var ownKeys = __webpack_require__( - /*! ../internals/own-keys */ - "./node_modules/core-js/internals/own-keys.js" - ); - var getOwnPropertyDescriptorModule = __webpack_require__( - /*! ../internals/object-get-own-property-descriptor */ - "./node_modules/core-js/internals/object-get-own-property-descriptor.js" - ); - var definePropertyModule = __webpack_require__( - /*! ../internals/object-define-property */ - "./node_modules/core-js/internals/object-define-property.js" - ); - module3.exports = function(target, source) { - var keys = ownKeys(source); - var defineProperty = definePropertyModule.f; - var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f; - for (var i = 0; i < keys.length; i++) { - var key2 = keys[i]; - if (!has(target, key2)) - defineProperty(target, key2, getOwnPropertyDescriptor(source, key2)); - } - }; - } - ), - /***/ - "./node_modules/core-js/internals/correct-prototype-getter.js": ( - /*!********************************************************************!*\ - !*** ./node_modules/core-js/internals/correct-prototype-getter.js ***! - \********************************************************************/ - /*! no static exports found */ - /***/ - function(module3, exports3, __webpack_require__) { - var fails = __webpack_require__( - /*! ../internals/fails */ - "./node_modules/core-js/internals/fails.js" - ); - module3.exports = !fails(function() { - function F() { - } - F.prototype.constructor = null; - return Object.getPrototypeOf(new F()) !== F.prototype; - }); - } - ), - /***/ - "./node_modules/core-js/internals/create-iterator-constructor.js": ( - /*!***********************************************************************!*\ - !*** ./node_modules/core-js/internals/create-iterator-constructor.js ***! - \***********************************************************************/ - /*! no static exports found */ - /***/ - function(module3, exports3, __webpack_require__) { - "use strict"; - var IteratorPrototype = __webpack_require__( - /*! ../internals/iterators-core */ - "./node_modules/core-js/internals/iterators-core.js" - ).IteratorPrototype; - var create = __webpack_require__( - /*! ../internals/object-create */ - "./node_modules/core-js/internals/object-create.js" - ); - var createPropertyDescriptor = __webpack_require__( - /*! ../internals/create-property-descriptor */ - "./node_modules/core-js/internals/create-property-descriptor.js" - ); - var setToStringTag = __webpack_require__( - /*! ../internals/set-to-string-tag */ - "./node_modules/core-js/internals/set-to-string-tag.js" - ); - var Iterators = __webpack_require__( - /*! ../internals/iterators */ - "./node_modules/core-js/internals/iterators.js" - ); - var returnThis = function() { - return this; - }; - module3.exports = function(IteratorConstructor, NAME, next) { - var TO_STRING_TAG = NAME + " Iterator"; - IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(1, next) }); - setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true); - Iterators[TO_STRING_TAG] = returnThis; - return IteratorConstructor; - }; - } - ), - /***/ - "./node_modules/core-js/internals/create-property-descriptor.js": ( - /*!**********************************************************************!*\ - !*** ./node_modules/core-js/internals/create-property-descriptor.js ***! - \**********************************************************************/ - /*! no static exports found */ - /***/ - function(module3, exports3) { - module3.exports = function(bitmap, value) { - return { - enumerable: !(bitmap & 1), - configurable: !(bitmap & 2), - writable: !(bitmap & 4), - value - }; - }; - } - ), - /***/ - "./node_modules/core-js/internals/create-property.js": ( - /*!***********************************************************!*\ - !*** ./node_modules/core-js/internals/create-property.js ***! - \***********************************************************/ - /*! no static exports found */ - /***/ - function(module3, exports3, __webpack_require__) { - "use strict"; - var toPrimitive = __webpack_require__( - /*! ../internals/to-primitive */ - "./node_modules/core-js/internals/to-primitive.js" - ); - var definePropertyModule = __webpack_require__( - /*! ../internals/object-define-property */ - "./node_modules/core-js/internals/object-define-property.js" - ); - var createPropertyDescriptor = __webpack_require__( - /*! ../internals/create-property-descriptor */ - "./node_modules/core-js/internals/create-property-descriptor.js" - ); - module3.exports = function(object, key2, value) { - var propertyKey = toPrimitive(key2); - if (propertyKey in object) - definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value)); - else - object[propertyKey] = value; - }; - } - ), - /***/ - "./node_modules/core-js/internals/define-iterator.js": ( - /*!***********************************************************!*\ - !*** ./node_modules/core-js/internals/define-iterator.js ***! - \***********************************************************/ - /*! no static exports found */ - /***/ - function(module3, exports3, __webpack_require__) { - "use strict"; - var $ = __webpack_require__( - /*! ../internals/export */ - "./node_modules/core-js/internals/export.js" - ); - var createIteratorConstructor = __webpack_require__( - /*! ../internals/create-iterator-constructor */ - "./node_modules/core-js/internals/create-iterator-constructor.js" - ); - var getPrototypeOf = __webpack_require__( - /*! ../internals/object-get-prototype-of */ - "./node_modules/core-js/internals/object-get-prototype-of.js" - ); - var setPrototypeOf = __webpack_require__( - /*! ../internals/object-set-prototype-of */ - "./node_modules/core-js/internals/object-set-prototype-of.js" - ); - var setToStringTag = __webpack_require__( - /*! ../internals/set-to-string-tag */ - "./node_modules/core-js/internals/set-to-string-tag.js" - ); - var hide = __webpack_require__( - /*! ../internals/hide */ - "./node_modules/core-js/internals/hide.js" - ); - var redefine = __webpack_require__( - /*! ../internals/redefine */ - "./node_modules/core-js/internals/redefine.js" - ); - var wellKnownSymbol = __webpack_require__( - /*! ../internals/well-known-symbol */ - "./node_modules/core-js/internals/well-known-symbol.js" - ); - var IS_PURE = __webpack_require__( - /*! ../internals/is-pure */ - "./node_modules/core-js/internals/is-pure.js" - ); - var Iterators = __webpack_require__( - /*! ../internals/iterators */ - "./node_modules/core-js/internals/iterators.js" - ); - var IteratorsCore = __webpack_require__( - /*! ../internals/iterators-core */ - "./node_modules/core-js/internals/iterators-core.js" - ); - var IteratorPrototype = IteratorsCore.IteratorPrototype; - var BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS; - var ITERATOR = wellKnownSymbol("iterator"); - var KEYS = "keys"; - var VALUES = "values"; - var ENTRIES = "entries"; - var returnThis = function() { - return this; - }; - module3.exports = function(Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) { - createIteratorConstructor(IteratorConstructor, NAME, next); - var getIterationMethod = function(KIND) { - if (KIND === DEFAULT && defaultIterator) - return defaultIterator; - if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype) - return IterablePrototype[KIND]; - switch (KIND) { - case KEYS: - return function keys() { - return new IteratorConstructor(this, KIND); - }; - case VALUES: - return function values() { - return new IteratorConstructor(this, KIND); - }; - case ENTRIES: - return function entries() { - return new IteratorConstructor(this, KIND); - }; - } - return function() { - return new IteratorConstructor(this); - }; - }; - var TO_STRING_TAG = NAME + " Iterator"; - var INCORRECT_VALUES_NAME = false; - var IterablePrototype = Iterable.prototype; - var nativeIterator = IterablePrototype[ITERATOR] || IterablePrototype["@@iterator"] || DEFAULT && IterablePrototype[DEFAULT]; - var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT); - var anyNativeIterator = NAME == "Array" ? IterablePrototype.entries || nativeIterator : nativeIterator; - var CurrentIteratorPrototype, methods, KEY; - if (anyNativeIterator) { - CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable())); - if (IteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) { - if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) { - if (setPrototypeOf) { - setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype); - } else if (typeof CurrentIteratorPrototype[ITERATOR] != "function") { - hide(CurrentIteratorPrototype, ITERATOR, returnThis); - } - } - setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true); - if (IS_PURE) - Iterators[TO_STRING_TAG] = returnThis; - } - } - if (DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) { - INCORRECT_VALUES_NAME = true; - defaultIterator = function values() { - return nativeIterator.call(this); - }; - } - if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) { - hide(IterablePrototype, ITERATOR, defaultIterator); - } - Iterators[NAME] = defaultIterator; - if (DEFAULT) { - methods = { - values: getIterationMethod(VALUES), - keys: IS_SET ? defaultIterator : getIterationMethod(KEYS), - entries: getIterationMethod(ENTRIES) - }; - if (FORCED) - for (KEY in methods) { - if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) { - redefine(IterablePrototype, KEY, methods[KEY]); - } - } - else - $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods); - } - return methods; - }; - } - ), - /***/ - "./node_modules/core-js/internals/descriptors.js": ( - /*!*******************************************************!*\ - !*** ./node_modules/core-js/internals/descriptors.js ***! - \*******************************************************/ - /*! no static exports found */ - /***/ - function(module3, exports3, __webpack_require__) { - var fails = __webpack_require__( - /*! ../internals/fails */ - "./node_modules/core-js/internals/fails.js" - ); - module3.exports = !fails(function() { - return Object.defineProperty({}, "a", { get: function() { - return 7; - } }).a != 7; - }); - } - ), - /***/ - "./node_modules/core-js/internals/document-create-element.js": ( - /*!*******************************************************************!*\ - !*** ./node_modules/core-js/internals/document-create-element.js ***! - \*******************************************************************/ - /*! no static exports found */ - /***/ - function(module3, exports3, __webpack_require__) { - var global2 = __webpack_require__( - /*! ../internals/global */ - "./node_modules/core-js/internals/global.js" - ); - var isObject2 = __webpack_require__( - /*! ../internals/is-object */ - "./node_modules/core-js/internals/is-object.js" - ); - var document2 = global2.document; - var exist = isObject2(document2) && isObject2(document2.createElement); - module3.exports = function(it) { - return exist ? document2.createElement(it) : {}; - }; - } - ), - /***/ - "./node_modules/core-js/internals/enum-bug-keys.js": ( - /*!*********************************************************!*\ - !*** ./node_modules/core-js/internals/enum-bug-keys.js ***! - \*********************************************************/ - /*! no static exports found */ - /***/ - function(module3, exports3) { - module3.exports = [ - "constructor", - "hasOwnProperty", - "isPrototypeOf", - "propertyIsEnumerable", - "toLocaleString", - "toString", - "valueOf" - ]; - } - ), - /***/ - "./node_modules/core-js/internals/export.js": ( - /*!**************************************************!*\ - !*** ./node_modules/core-js/internals/export.js ***! - \**************************************************/ - /*! no static exports found */ - /***/ - function(module3, exports3, __webpack_require__) { - var global2 = __webpack_require__( - /*! ../internals/global */ - "./node_modules/core-js/internals/global.js" - ); - var getOwnPropertyDescriptor = __webpack_require__( - /*! ../internals/object-get-own-property-descriptor */ - "./node_modules/core-js/internals/object-get-own-property-descriptor.js" - ).f; - var hide = __webpack_require__( - /*! ../internals/hide */ - "./node_modules/core-js/internals/hide.js" - ); - var redefine = __webpack_require__( - /*! ../internals/redefine */ - "./node_modules/core-js/internals/redefine.js" - ); - var setGlobal = __webpack_require__( - /*! ../internals/set-global */ - "./node_modules/core-js/internals/set-global.js" - ); - var copyConstructorProperties = __webpack_require__( - /*! ../internals/copy-constructor-properties */ - "./node_modules/core-js/internals/copy-constructor-properties.js" - ); - var isForced = __webpack_require__( - /*! ../internals/is-forced */ - "./node_modules/core-js/internals/is-forced.js" - ); - module3.exports = function(options, source) { - var TARGET = options.target; - var GLOBAL = options.global; - var STATIC = options.stat; - var FORCED, target, key2, targetProperty, sourceProperty, descriptor; - if (GLOBAL) { - target = global2; - } else if (STATIC) { - target = global2[TARGET] || setGlobal(TARGET, {}); - } else { - target = (global2[TARGET] || {}).prototype; - } - if (target) - for (key2 in source) { - sourceProperty = source[key2]; - if (options.noTargetGet) { - descriptor = getOwnPropertyDescriptor(target, key2); - targetProperty = descriptor && descriptor.value; - } else - targetProperty = target[key2]; - FORCED = isForced(GLOBAL ? key2 : TARGET + (STATIC ? "." : "#") + key2, options.forced); - if (!FORCED && targetProperty !== void 0) { - if (typeof sourceProperty === typeof targetProperty) - continue; - copyConstructorProperties(sourceProperty, targetProperty); - } - if (options.sham || targetProperty && targetProperty.sham) { - hide(sourceProperty, "sham", true); - } - redefine(target, key2, sourceProperty, options); - } - }; - } - ), - /***/ - "./node_modules/core-js/internals/fails.js": ( - /*!*************************************************!*\ - !*** ./node_modules/core-js/internals/fails.js ***! - \*************************************************/ - /*! no static exports found */ - /***/ - function(module3, exports3) { - module3.exports = function(exec) { - try { - return !!exec(); - } catch (error) { - return true; - } - }; - } - ), - /***/ - "./node_modules/core-js/internals/function-to-string.js": ( - /*!**************************************************************!*\ - !*** ./node_modules/core-js/internals/function-to-string.js ***! - \**************************************************************/ - /*! no static exports found */ - /***/ - function(module3, exports3, __webpack_require__) { - var shared = __webpack_require__( - /*! ../internals/shared */ - "./node_modules/core-js/internals/shared.js" - ); - module3.exports = shared("native-function-to-string", Function.toString); - } - ), - /***/ - "./node_modules/core-js/internals/get-iterator-method.js": ( - /*!***************************************************************!*\ - !*** ./node_modules/core-js/internals/get-iterator-method.js ***! - \***************************************************************/ - /*! no static exports found */ - /***/ - function(module3, exports3, __webpack_require__) { - var classof = __webpack_require__( - /*! ../internals/classof */ - "./node_modules/core-js/internals/classof.js" - ); - var Iterators = __webpack_require__( - /*! ../internals/iterators */ - "./node_modules/core-js/internals/iterators.js" - ); - var wellKnownSymbol = __webpack_require__( - /*! ../internals/well-known-symbol */ - "./node_modules/core-js/internals/well-known-symbol.js" - ); - var ITERATOR = wellKnownSymbol("iterator"); - module3.exports = function(it) { - if (it != void 0) - return it[ITERATOR] || it["@@iterator"] || Iterators[classof(it)]; - }; - } - ), - /***/ - "./node_modules/core-js/internals/global.js": ( - /*!**************************************************!*\ - !*** ./node_modules/core-js/internals/global.js ***! - \**************************************************/ - /*! no static exports found */ - /***/ - function(module3, exports3, __webpack_require__) { - (function(global2) { - var O = "object"; - var check = function(it) { - return it && it.Math == Math && it; - }; - module3.exports = // eslint-disable-next-line no-undef - check(typeof globalThis == O && globalThis) || check(typeof window == O && window) || check(typeof self == O && self) || check(typeof global2 == O && global2) || // eslint-disable-next-line no-new-func - Function("return this")(); - }).call(this, __webpack_require__( - /*! ./../../webpack/buildin/global.js */ - "./node_modules/webpack/buildin/global.js" - )); - } - ), - /***/ - "./node_modules/core-js/internals/has.js": ( - /*!***********************************************!*\ - !*** ./node_modules/core-js/internals/has.js ***! - \***********************************************/ - /*! no static exports found */ - /***/ - function(module3, exports3) { - var hasOwnProperty = {}.hasOwnProperty; - module3.exports = function(it, key2) { - return hasOwnProperty.call(it, key2); - }; - } - ), - /***/ - "./node_modules/core-js/internals/hidden-keys.js": ( - /*!*******************************************************!*\ - !*** ./node_modules/core-js/internals/hidden-keys.js ***! - \*******************************************************/ - /*! no static exports found */ - /***/ - function(module3, exports3) { - module3.exports = {}; - } - ), - /***/ - "./node_modules/core-js/internals/hide.js": ( - /*!************************************************!*\ - !*** ./node_modules/core-js/internals/hide.js ***! - \************************************************/ - /*! no static exports found */ - /***/ - function(module3, exports3, __webpack_require__) { - var DESCRIPTORS = __webpack_require__( - /*! ../internals/descriptors */ - "./node_modules/core-js/internals/descriptors.js" - ); - var definePropertyModule = __webpack_require__( - /*! ../internals/object-define-property */ - "./node_modules/core-js/internals/object-define-property.js" - ); - var createPropertyDescriptor = __webpack_require__( - /*! ../internals/create-property-descriptor */ - "./node_modules/core-js/internals/create-property-descriptor.js" - ); - module3.exports = DESCRIPTORS ? function(object, key2, value) { - return definePropertyModule.f(object, key2, createPropertyDescriptor(1, value)); - } : function(object, key2, value) { - object[key2] = value; - return object; - }; - } - ), - /***/ - "./node_modules/core-js/internals/html.js": ( - /*!************************************************!*\ - !*** ./node_modules/core-js/internals/html.js ***! - \************************************************/ - /*! no static exports found */ - /***/ - function(module3, exports3, __webpack_require__) { - var global2 = __webpack_require__( - /*! ../internals/global */ - "./node_modules/core-js/internals/global.js" - ); - var document2 = global2.document; - module3.exports = document2 && document2.documentElement; - } - ), - /***/ - "./node_modules/core-js/internals/ie8-dom-define.js": ( - /*!**********************************************************!*\ - !*** ./node_modules/core-js/internals/ie8-dom-define.js ***! - \**********************************************************/ - /*! no static exports found */ - /***/ - function(module3, exports3, __webpack_require__) { - var DESCRIPTORS = __webpack_require__( - /*! ../internals/descriptors */ - "./node_modules/core-js/internals/descriptors.js" - ); - var fails = __webpack_require__( - /*! ../internals/fails */ - "./node_modules/core-js/internals/fails.js" - ); - var createElement = __webpack_require__( - /*! ../internals/document-create-element */ - "./node_modules/core-js/internals/document-create-element.js" - ); - module3.exports = !DESCRIPTORS && !fails(function() { - return Object.defineProperty(createElement("div"), "a", { - get: function() { - return 7; - } - }).a != 7; - }); - } - ), - /***/ - "./node_modules/core-js/internals/indexed-object.js": ( - /*!**********************************************************!*\ - !*** ./node_modules/core-js/internals/indexed-object.js ***! - \**********************************************************/ - /*! no static exports found */ - /***/ - function(module3, exports3, __webpack_require__) { - var fails = __webpack_require__( - /*! ../internals/fails */ - "./node_modules/core-js/internals/fails.js" - ); - var classof = __webpack_require__( - /*! ../internals/classof-raw */ - "./node_modules/core-js/internals/classof-raw.js" - ); - var split = "".split; - module3.exports = fails(function() { - return !Object("z").propertyIsEnumerable(0); - }) ? function(it) { - return classof(it) == "String" ? split.call(it, "") : Object(it); - } : Object; - } - ), - /***/ - "./node_modules/core-js/internals/internal-state.js": ( - /*!**********************************************************!*\ - !*** ./node_modules/core-js/internals/internal-state.js ***! - \**********************************************************/ - /*! no static exports found */ - /***/ - function(module3, exports3, __webpack_require__) { - var NATIVE_WEAK_MAP = __webpack_require__( - /*! ../internals/native-weak-map */ - "./node_modules/core-js/internals/native-weak-map.js" - ); - var global2 = __webpack_require__( - /*! ../internals/global */ - "./node_modules/core-js/internals/global.js" - ); - var isObject2 = __webpack_require__( - /*! ../internals/is-object */ - "./node_modules/core-js/internals/is-object.js" - ); - var hide = __webpack_require__( - /*! ../internals/hide */ - "./node_modules/core-js/internals/hide.js" - ); - var objectHas = __webpack_require__( - /*! ../internals/has */ - "./node_modules/core-js/internals/has.js" - ); - var sharedKey = __webpack_require__( - /*! ../internals/shared-key */ - "./node_modules/core-js/internals/shared-key.js" - ); - var hiddenKeys = __webpack_require__( - /*! ../internals/hidden-keys */ - "./node_modules/core-js/internals/hidden-keys.js" - ); - var WeakMap2 = global2.WeakMap; - var set, get, has; - var enforce = function(it) { - return has(it) ? get(it) : set(it, {}); - }; - var getterFor = function(TYPE) { - return function(it) { - var state; - if (!isObject2(it) || (state = get(it)).type !== TYPE) { - throw TypeError("Incompatible receiver, " + TYPE + " required"); - } - return state; - }; - }; - if (NATIVE_WEAK_MAP) { - var store = new WeakMap2(); - var wmget = store.get; - var wmhas = store.has; - var wmset = store.set; - set = function(it, metadata) { - wmset.call(store, it, metadata); - return metadata; - }; - get = function(it) { - return wmget.call(store, it) || {}; - }; - has = function(it) { - return wmhas.call(store, it); - }; - } else { - var STATE = sharedKey("state"); - hiddenKeys[STATE] = true; - set = function(it, metadata) { - hide(it, STATE, metadata); - return metadata; - }; - get = function(it) { - return objectHas(it, STATE) ? it[STATE] : {}; - }; - has = function(it) { - return objectHas(it, STATE); - }; - } - module3.exports = { - set, - get, - has, - enforce, - getterFor - }; - } - ), - /***/ - "./node_modules/core-js/internals/is-array-iterator-method.js": ( - /*!********************************************************************!*\ - !*** ./node_modules/core-js/internals/is-array-iterator-method.js ***! - \********************************************************************/ - /*! no static exports found */ - /***/ - function(module3, exports3, __webpack_require__) { - var wellKnownSymbol = __webpack_require__( - /*! ../internals/well-known-symbol */ - "./node_modules/core-js/internals/well-known-symbol.js" - ); - var Iterators = __webpack_require__( - /*! ../internals/iterators */ - "./node_modules/core-js/internals/iterators.js" - ); - var ITERATOR = wellKnownSymbol("iterator"); - var ArrayPrototype = Array.prototype; - module3.exports = function(it) { - return it !== void 0 && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it); - }; - } - ), - /***/ - "./node_modules/core-js/internals/is-forced.js": ( - /*!*****************************************************!*\ - !*** ./node_modules/core-js/internals/is-forced.js ***! - \*****************************************************/ - /*! no static exports found */ - /***/ - function(module3, exports3, __webpack_require__) { - var fails = __webpack_require__( - /*! ../internals/fails */ - "./node_modules/core-js/internals/fails.js" - ); - var replacement = /#|\.prototype\./; - var isForced = function(feature, detection) { - var value = data[normalize2(feature)]; - return value == POLYFILL ? true : value == NATIVE ? false : typeof detection == "function" ? fails(detection) : !!detection; - }; - var normalize2 = isForced.normalize = function(string) { - return String(string).replace(replacement, ".").toLowerCase(); - }; - var data = isForced.data = {}; - var NATIVE = isForced.NATIVE = "N"; - var POLYFILL = isForced.POLYFILL = "P"; - module3.exports = isForced; - } - ), - /***/ - "./node_modules/core-js/internals/is-object.js": ( - /*!*****************************************************!*\ - !*** ./node_modules/core-js/internals/is-object.js ***! - \*****************************************************/ - /*! no static exports found */ - /***/ - function(module3, exports3) { - module3.exports = function(it) { - return typeof it === "object" ? it !== null : typeof it === "function"; - }; - } - ), - /***/ - "./node_modules/core-js/internals/is-pure.js": ( - /*!***************************************************!*\ - !*** ./node_modules/core-js/internals/is-pure.js ***! - \***************************************************/ - /*! no static exports found */ - /***/ - function(module3, exports3) { - module3.exports = false; - } - ), - /***/ - "./node_modules/core-js/internals/iterators-core.js": ( - /*!**********************************************************!*\ - !*** ./node_modules/core-js/internals/iterators-core.js ***! - \**********************************************************/ - /*! no static exports found */ - /***/ - function(module3, exports3, __webpack_require__) { - "use strict"; - var getPrototypeOf = __webpack_require__( - /*! ../internals/object-get-prototype-of */ - "./node_modules/core-js/internals/object-get-prototype-of.js" - ); - var hide = __webpack_require__( - /*! ../internals/hide */ - "./node_modules/core-js/internals/hide.js" - ); - var has = __webpack_require__( - /*! ../internals/has */ - "./node_modules/core-js/internals/has.js" - ); - var wellKnownSymbol = __webpack_require__( - /*! ../internals/well-known-symbol */ - "./node_modules/core-js/internals/well-known-symbol.js" - ); - var IS_PURE = __webpack_require__( - /*! ../internals/is-pure */ - "./node_modules/core-js/internals/is-pure.js" - ); - var ITERATOR = wellKnownSymbol("iterator"); - var BUGGY_SAFARI_ITERATORS = false; - var returnThis = function() { - return this; - }; - var IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator; - if ([].keys) { - arrayIterator = [].keys(); - if (!("next" in arrayIterator)) - BUGGY_SAFARI_ITERATORS = true; - else { - PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator)); - if (PrototypeOfArrayIteratorPrototype !== Object.prototype) - IteratorPrototype = PrototypeOfArrayIteratorPrototype; - } - } - if (IteratorPrototype == void 0) - IteratorPrototype = {}; - if (!IS_PURE && !has(IteratorPrototype, ITERATOR)) - hide(IteratorPrototype, ITERATOR, returnThis); - module3.exports = { - IteratorPrototype, - BUGGY_SAFARI_ITERATORS - }; - } - ), - /***/ - "./node_modules/core-js/internals/iterators.js": ( - /*!*****************************************************!*\ - !*** ./node_modules/core-js/internals/iterators.js ***! - \*****************************************************/ - /*! no static exports found */ - /***/ - function(module3, exports3) { - module3.exports = {}; - } - ), - /***/ - "./node_modules/core-js/internals/native-symbol.js": ( - /*!*********************************************************!*\ - !*** ./node_modules/core-js/internals/native-symbol.js ***! - \*********************************************************/ - /*! no static exports found */ - /***/ - function(module3, exports3, __webpack_require__) { - var fails = __webpack_require__( - /*! ../internals/fails */ - "./node_modules/core-js/internals/fails.js" - ); - module3.exports = !!Object.getOwnPropertySymbols && !fails(function() { - return !String(Symbol()); - }); - } - ), - /***/ - "./node_modules/core-js/internals/native-weak-map.js": ( - /*!***********************************************************!*\ - !*** ./node_modules/core-js/internals/native-weak-map.js ***! - \***********************************************************/ - /*! no static exports found */ - /***/ - function(module3, exports3, __webpack_require__) { - var global2 = __webpack_require__( - /*! ../internals/global */ - "./node_modules/core-js/internals/global.js" - ); - var nativeFunctionToString = __webpack_require__( - /*! ../internals/function-to-string */ - "./node_modules/core-js/internals/function-to-string.js" - ); - var WeakMap2 = global2.WeakMap; - module3.exports = typeof WeakMap2 === "function" && /native code/.test(nativeFunctionToString.call(WeakMap2)); - } - ), - /***/ - "./node_modules/core-js/internals/object-create.js": ( - /*!*********************************************************!*\ - !*** ./node_modules/core-js/internals/object-create.js ***! - \*********************************************************/ - /*! no static exports found */ - /***/ - function(module3, exports3, __webpack_require__) { - var anObject = __webpack_require__( - /*! ../internals/an-object */ - "./node_modules/core-js/internals/an-object.js" - ); - var defineProperties = __webpack_require__( - /*! ../internals/object-define-properties */ - "./node_modules/core-js/internals/object-define-properties.js" - ); - var enumBugKeys = __webpack_require__( - /*! ../internals/enum-bug-keys */ - "./node_modules/core-js/internals/enum-bug-keys.js" - ); - var hiddenKeys = __webpack_require__( - /*! ../internals/hidden-keys */ - "./node_modules/core-js/internals/hidden-keys.js" - ); - var html2 = __webpack_require__( - /*! ../internals/html */ - "./node_modules/core-js/internals/html.js" - ); - var documentCreateElement = __webpack_require__( - /*! ../internals/document-create-element */ - "./node_modules/core-js/internals/document-create-element.js" - ); - var sharedKey = __webpack_require__( - /*! ../internals/shared-key */ - "./node_modules/core-js/internals/shared-key.js" - ); - var IE_PROTO = sharedKey("IE_PROTO"); - var PROTOTYPE = "prototype"; - var Empty = function() { - }; - var createDict = function() { - var iframe = documentCreateElement("iframe"); - var length = enumBugKeys.length; - var lt = "<"; - var script = "script"; - var gt = ">"; - var js = "java" + script + ":"; - var iframeDocument; - iframe.style.display = "none"; - html2.appendChild(iframe); - iframe.src = String(js); - iframeDocument = iframe.contentWindow.document; - iframeDocument.open(); - iframeDocument.write(lt + script + gt + "document.F=Object" + lt + "/" + script + gt); - iframeDocument.close(); - createDict = iframeDocument.F; - while (length--) - delete createDict[PROTOTYPE][enumBugKeys[length]]; - return createDict(); - }; - module3.exports = Object.create || function create(O, Properties) { - var result; - if (O !== null) { - Empty[PROTOTYPE] = anObject(O); - result = new Empty(); - Empty[PROTOTYPE] = null; - result[IE_PROTO] = O; - } else - result = createDict(); - return Properties === void 0 ? result : defineProperties(result, Properties); - }; - hiddenKeys[IE_PROTO] = true; - } - ), - /***/ - "./node_modules/core-js/internals/object-define-properties.js": ( - /*!********************************************************************!*\ - !*** ./node_modules/core-js/internals/object-define-properties.js ***! - \********************************************************************/ - /*! no static exports found */ - /***/ - function(module3, exports3, __webpack_require__) { - var DESCRIPTORS = __webpack_require__( - /*! ../internals/descriptors */ - "./node_modules/core-js/internals/descriptors.js" - ); - var definePropertyModule = __webpack_require__( - /*! ../internals/object-define-property */ - "./node_modules/core-js/internals/object-define-property.js" - ); - var anObject = __webpack_require__( - /*! ../internals/an-object */ - "./node_modules/core-js/internals/an-object.js" - ); - var objectKeys = __webpack_require__( - /*! ../internals/object-keys */ - "./node_modules/core-js/internals/object-keys.js" - ); - module3.exports = DESCRIPTORS ? Object.defineProperties : function defineProperties(O, Properties) { - anObject(O); - var keys = objectKeys(Properties); - var length = keys.length; - var i = 0; - var key2; - while (length > i) - definePropertyModule.f(O, key2 = keys[i++], Properties[key2]); - return O; - }; - } - ), - /***/ - "./node_modules/core-js/internals/object-define-property.js": ( - /*!******************************************************************!*\ - !*** ./node_modules/core-js/internals/object-define-property.js ***! - \******************************************************************/ - /*! no static exports found */ - /***/ - function(module3, exports3, __webpack_require__) { - var DESCRIPTORS = __webpack_require__( - /*! ../internals/descriptors */ - "./node_modules/core-js/internals/descriptors.js" - ); - var IE8_DOM_DEFINE = __webpack_require__( - /*! ../internals/ie8-dom-define */ - "./node_modules/core-js/internals/ie8-dom-define.js" - ); - var anObject = __webpack_require__( - /*! ../internals/an-object */ - "./node_modules/core-js/internals/an-object.js" - ); - var toPrimitive = __webpack_require__( - /*! ../internals/to-primitive */ - "./node_modules/core-js/internals/to-primitive.js" - ); - var nativeDefineProperty = Object.defineProperty; - exports3.f = DESCRIPTORS ? nativeDefineProperty : function defineProperty(O, P, Attributes) { - anObject(O); - P = toPrimitive(P, true); - anObject(Attributes); - if (IE8_DOM_DEFINE) - try { - return nativeDefineProperty(O, P, Attributes); - } catch (error) { - } - if ("get" in Attributes || "set" in Attributes) - throw TypeError("Accessors not supported"); - if ("value" in Attributes) - O[P] = Attributes.value; - return O; - }; - } - ), - /***/ - "./node_modules/core-js/internals/object-get-own-property-descriptor.js": ( - /*!******************************************************************************!*\ - !*** ./node_modules/core-js/internals/object-get-own-property-descriptor.js ***! - \******************************************************************************/ - /*! no static exports found */ - /***/ - function(module3, exports3, __webpack_require__) { - var DESCRIPTORS = __webpack_require__( - /*! ../internals/descriptors */ - "./node_modules/core-js/internals/descriptors.js" - ); - var propertyIsEnumerableModule = __webpack_require__( - /*! ../internals/object-property-is-enumerable */ - "./node_modules/core-js/internals/object-property-is-enumerable.js" - ); - var createPropertyDescriptor = __webpack_require__( - /*! ../internals/create-property-descriptor */ - "./node_modules/core-js/internals/create-property-descriptor.js" - ); - var toIndexedObject = __webpack_require__( - /*! ../internals/to-indexed-object */ - "./node_modules/core-js/internals/to-indexed-object.js" - ); - var toPrimitive = __webpack_require__( - /*! ../internals/to-primitive */ - "./node_modules/core-js/internals/to-primitive.js" - ); - var has = __webpack_require__( - /*! ../internals/has */ - "./node_modules/core-js/internals/has.js" - ); - var IE8_DOM_DEFINE = __webpack_require__( - /*! ../internals/ie8-dom-define */ - "./node_modules/core-js/internals/ie8-dom-define.js" - ); - var nativeGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; - exports3.f = DESCRIPTORS ? nativeGetOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) { - O = toIndexedObject(O); - P = toPrimitive(P, true); - if (IE8_DOM_DEFINE) - try { - return nativeGetOwnPropertyDescriptor(O, P); - } catch (error) { - } - if (has(O, P)) - return createPropertyDescriptor(!propertyIsEnumerableModule.f.call(O, P), O[P]); - }; - } - ), - /***/ - "./node_modules/core-js/internals/object-get-own-property-names.js": ( - /*!*************************************************************************!*\ - !*** ./node_modules/core-js/internals/object-get-own-property-names.js ***! - \*************************************************************************/ - /*! no static exports found */ - /***/ - function(module3, exports3, __webpack_require__) { - var internalObjectKeys = __webpack_require__( - /*! ../internals/object-keys-internal */ - "./node_modules/core-js/internals/object-keys-internal.js" - ); - var enumBugKeys = __webpack_require__( - /*! ../internals/enum-bug-keys */ - "./node_modules/core-js/internals/enum-bug-keys.js" - ); - var hiddenKeys = enumBugKeys.concat("length", "prototype"); - exports3.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) { - return internalObjectKeys(O, hiddenKeys); - }; - } - ), - /***/ - "./node_modules/core-js/internals/object-get-own-property-symbols.js": ( - /*!***************************************************************************!*\ - !*** ./node_modules/core-js/internals/object-get-own-property-symbols.js ***! - \***************************************************************************/ - /*! no static exports found */ - /***/ - function(module3, exports3) { - exports3.f = Object.getOwnPropertySymbols; - } - ), - /***/ - "./node_modules/core-js/internals/object-get-prototype-of.js": ( - /*!*******************************************************************!*\ - !*** ./node_modules/core-js/internals/object-get-prototype-of.js ***! - \*******************************************************************/ - /*! no static exports found */ - /***/ - function(module3, exports3, __webpack_require__) { - var has = __webpack_require__( - /*! ../internals/has */ - "./node_modules/core-js/internals/has.js" - ); - var toObject = __webpack_require__( - /*! ../internals/to-object */ - "./node_modules/core-js/internals/to-object.js" - ); - var sharedKey = __webpack_require__( - /*! ../internals/shared-key */ - "./node_modules/core-js/internals/shared-key.js" - ); - var CORRECT_PROTOTYPE_GETTER = __webpack_require__( - /*! ../internals/correct-prototype-getter */ - "./node_modules/core-js/internals/correct-prototype-getter.js" - ); - var IE_PROTO = sharedKey("IE_PROTO"); - var ObjectPrototype = Object.prototype; - module3.exports = CORRECT_PROTOTYPE_GETTER ? Object.getPrototypeOf : function(O) { - O = toObject(O); - if (has(O, IE_PROTO)) - return O[IE_PROTO]; - if (typeof O.constructor == "function" && O instanceof O.constructor) { - return O.constructor.prototype; - } - return O instanceof Object ? ObjectPrototype : null; - }; - } - ), - /***/ - "./node_modules/core-js/internals/object-keys-internal.js": ( - /*!****************************************************************!*\ - !*** ./node_modules/core-js/internals/object-keys-internal.js ***! - \****************************************************************/ - /*! no static exports found */ - /***/ - function(module3, exports3, __webpack_require__) { - var has = __webpack_require__( - /*! ../internals/has */ - "./node_modules/core-js/internals/has.js" - ); - var toIndexedObject = __webpack_require__( - /*! ../internals/to-indexed-object */ - "./node_modules/core-js/internals/to-indexed-object.js" - ); - var arrayIncludes = __webpack_require__( - /*! ../internals/array-includes */ - "./node_modules/core-js/internals/array-includes.js" - ); - var hiddenKeys = __webpack_require__( - /*! ../internals/hidden-keys */ - "./node_modules/core-js/internals/hidden-keys.js" - ); - var arrayIndexOf = arrayIncludes(false); - module3.exports = function(object, names) { - var O = toIndexedObject(object); - var i = 0; - var result = []; - var key2; - for (key2 in O) - !has(hiddenKeys, key2) && has(O, key2) && result.push(key2); - while (names.length > i) - if (has(O, key2 = names[i++])) { - ~arrayIndexOf(result, key2) || result.push(key2); - } - return result; - }; - } - ), - /***/ - "./node_modules/core-js/internals/object-keys.js": ( - /*!*******************************************************!*\ - !*** ./node_modules/core-js/internals/object-keys.js ***! - \*******************************************************/ - /*! no static exports found */ - /***/ - function(module3, exports3, __webpack_require__) { - var internalObjectKeys = __webpack_require__( - /*! ../internals/object-keys-internal */ - "./node_modules/core-js/internals/object-keys-internal.js" - ); - var enumBugKeys = __webpack_require__( - /*! ../internals/enum-bug-keys */ - "./node_modules/core-js/internals/enum-bug-keys.js" - ); - module3.exports = Object.keys || function keys(O) { - return internalObjectKeys(O, enumBugKeys); - }; - } - ), - /***/ - "./node_modules/core-js/internals/object-property-is-enumerable.js": ( - /*!*************************************************************************!*\ - !*** ./node_modules/core-js/internals/object-property-is-enumerable.js ***! - \*************************************************************************/ - /*! no static exports found */ - /***/ - function(module3, exports3, __webpack_require__) { - "use strict"; - var nativePropertyIsEnumerable = {}.propertyIsEnumerable; - var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; - var NASHORN_BUG = getOwnPropertyDescriptor && !nativePropertyIsEnumerable.call({ 1: 2 }, 1); - exports3.f = NASHORN_BUG ? function propertyIsEnumerable(V) { - var descriptor = getOwnPropertyDescriptor(this, V); - return !!descriptor && descriptor.enumerable; - } : nativePropertyIsEnumerable; - } - ), - /***/ - "./node_modules/core-js/internals/object-set-prototype-of.js": ( - /*!*******************************************************************!*\ - !*** ./node_modules/core-js/internals/object-set-prototype-of.js ***! - \*******************************************************************/ - /*! no static exports found */ - /***/ - function(module3, exports3, __webpack_require__) { - var validateSetPrototypeOfArguments = __webpack_require__( - /*! ../internals/validate-set-prototype-of-arguments */ - "./node_modules/core-js/internals/validate-set-prototype-of-arguments.js" - ); - module3.exports = Object.setPrototypeOf || ("__proto__" in {} ? function() { - var correctSetter = false; - var test = {}; - var setter; - try { - setter = Object.getOwnPropertyDescriptor(Object.prototype, "__proto__").set; - setter.call(test, []); - correctSetter = test instanceof Array; - } catch (error) { - } - return function setPrototypeOf(O, proto) { - validateSetPrototypeOfArguments(O, proto); - if (correctSetter) - setter.call(O, proto); - else - O.__proto__ = proto; - return O; - }; - }() : void 0); - } - ), - /***/ - "./node_modules/core-js/internals/own-keys.js": ( - /*!****************************************************!*\ - !*** ./node_modules/core-js/internals/own-keys.js ***! - \****************************************************/ - /*! no static exports found */ - /***/ - function(module3, exports3, __webpack_require__) { - var global2 = __webpack_require__( - /*! ../internals/global */ - "./node_modules/core-js/internals/global.js" - ); - var getOwnPropertyNamesModule = __webpack_require__( - /*! ../internals/object-get-own-property-names */ - "./node_modules/core-js/internals/object-get-own-property-names.js" - ); - var getOwnPropertySymbolsModule = __webpack_require__( - /*! ../internals/object-get-own-property-symbols */ - "./node_modules/core-js/internals/object-get-own-property-symbols.js" - ); - var anObject = __webpack_require__( - /*! ../internals/an-object */ - "./node_modules/core-js/internals/an-object.js" - ); - var Reflect2 = global2.Reflect; - module3.exports = Reflect2 && Reflect2.ownKeys || function ownKeys(it) { - var keys = getOwnPropertyNamesModule.f(anObject(it)); - var getOwnPropertySymbols = getOwnPropertySymbolsModule.f; - return getOwnPropertySymbols ? keys.concat(getOwnPropertySymbols(it)) : keys; - }; - } - ), - /***/ - "./node_modules/core-js/internals/path.js": ( - /*!************************************************!*\ - !*** ./node_modules/core-js/internals/path.js ***! - \************************************************/ - /*! no static exports found */ - /***/ - function(module3, exports3, __webpack_require__) { - module3.exports = __webpack_require__( - /*! ../internals/global */ - "./node_modules/core-js/internals/global.js" - ); - } - ), - /***/ - "./node_modules/core-js/internals/redefine.js": ( - /*!****************************************************!*\ - !*** ./node_modules/core-js/internals/redefine.js ***! - \****************************************************/ - /*! no static exports found */ - /***/ - function(module3, exports3, __webpack_require__) { - var global2 = __webpack_require__( - /*! ../internals/global */ - "./node_modules/core-js/internals/global.js" - ); - var shared = __webpack_require__( - /*! ../internals/shared */ - "./node_modules/core-js/internals/shared.js" - ); - var hide = __webpack_require__( - /*! ../internals/hide */ - "./node_modules/core-js/internals/hide.js" - ); - var has = __webpack_require__( - /*! ../internals/has */ - "./node_modules/core-js/internals/has.js" - ); - var setGlobal = __webpack_require__( - /*! ../internals/set-global */ - "./node_modules/core-js/internals/set-global.js" - ); - var nativeFunctionToString = __webpack_require__( - /*! ../internals/function-to-string */ - "./node_modules/core-js/internals/function-to-string.js" - ); - var InternalStateModule = __webpack_require__( - /*! ../internals/internal-state */ - "./node_modules/core-js/internals/internal-state.js" - ); - var getInternalState = InternalStateModule.get; - var enforceInternalState = InternalStateModule.enforce; - var TEMPLATE = String(nativeFunctionToString).split("toString"); - shared("inspectSource", function(it) { - return nativeFunctionToString.call(it); - }); - (module3.exports = function(O, key2, value, options) { - var unsafe = options ? !!options.unsafe : false; - var simple2 = options ? !!options.enumerable : false; - var noTargetGet = options ? !!options.noTargetGet : false; - if (typeof value == "function") { - if (typeof key2 == "string" && !has(value, "name")) - hide(value, "name", key2); - enforceInternalState(value).source = TEMPLATE.join(typeof key2 == "string" ? key2 : ""); - } - if (O === global2) { - if (simple2) - O[key2] = value; - else - setGlobal(key2, value); - return; - } else if (!unsafe) { - delete O[key2]; - } else if (!noTargetGet && O[key2]) { - simple2 = true; - } - if (simple2) - O[key2] = value; - else - hide(O, key2, value); - })(Function.prototype, "toString", function toString() { - return typeof this == "function" && getInternalState(this).source || nativeFunctionToString.call(this); - }); - } - ), - /***/ - "./node_modules/core-js/internals/require-object-coercible.js": ( - /*!********************************************************************!*\ - !*** ./node_modules/core-js/internals/require-object-coercible.js ***! - \********************************************************************/ - /*! no static exports found */ - /***/ - function(module3, exports3) { - module3.exports = function(it) { - if (it == void 0) - throw TypeError("Can't call method on " + it); - return it; - }; - } - ), - /***/ - "./node_modules/core-js/internals/set-global.js": ( - /*!******************************************************!*\ - !*** ./node_modules/core-js/internals/set-global.js ***! - \******************************************************/ - /*! no static exports found */ - /***/ - function(module3, exports3, __webpack_require__) { - var global2 = __webpack_require__( - /*! ../internals/global */ - "./node_modules/core-js/internals/global.js" - ); - var hide = __webpack_require__( - /*! ../internals/hide */ - "./node_modules/core-js/internals/hide.js" - ); - module3.exports = function(key2, value) { - try { - hide(global2, key2, value); - } catch (error) { - global2[key2] = value; - } - return value; - }; - } - ), - /***/ - "./node_modules/core-js/internals/set-to-string-tag.js": ( - /*!*************************************************************!*\ - !*** ./node_modules/core-js/internals/set-to-string-tag.js ***! - \*************************************************************/ - /*! no static exports found */ - /***/ - function(module3, exports3, __webpack_require__) { - var defineProperty = __webpack_require__( - /*! ../internals/object-define-property */ - "./node_modules/core-js/internals/object-define-property.js" - ).f; - var has = __webpack_require__( - /*! ../internals/has */ - "./node_modules/core-js/internals/has.js" - ); - var wellKnownSymbol = __webpack_require__( - /*! ../internals/well-known-symbol */ - "./node_modules/core-js/internals/well-known-symbol.js" - ); - var TO_STRING_TAG = wellKnownSymbol("toStringTag"); - module3.exports = function(it, TAG, STATIC) { - if (it && !has(it = STATIC ? it : it.prototype, TO_STRING_TAG)) { - defineProperty(it, TO_STRING_TAG, { configurable: true, value: TAG }); - } - }; - } - ), - /***/ - "./node_modules/core-js/internals/shared-key.js": ( - /*!******************************************************!*\ - !*** ./node_modules/core-js/internals/shared-key.js ***! - \******************************************************/ - /*! no static exports found */ - /***/ - function(module3, exports3, __webpack_require__) { - var shared = __webpack_require__( - /*! ../internals/shared */ - "./node_modules/core-js/internals/shared.js" - ); - var uid = __webpack_require__( - /*! ../internals/uid */ - "./node_modules/core-js/internals/uid.js" - ); - var keys = shared("keys"); - module3.exports = function(key2) { - return keys[key2] || (keys[key2] = uid(key2)); - }; - } - ), - /***/ - "./node_modules/core-js/internals/shared.js": ( - /*!**************************************************!*\ - !*** ./node_modules/core-js/internals/shared.js ***! - \**************************************************/ - /*! no static exports found */ - /***/ - function(module3, exports3, __webpack_require__) { - var global2 = __webpack_require__( - /*! ../internals/global */ - "./node_modules/core-js/internals/global.js" - ); - var setGlobal = __webpack_require__( - /*! ../internals/set-global */ - "./node_modules/core-js/internals/set-global.js" - ); - var IS_PURE = __webpack_require__( - /*! ../internals/is-pure */ - "./node_modules/core-js/internals/is-pure.js" - ); - var SHARED = "__core-js_shared__"; - var store = global2[SHARED] || setGlobal(SHARED, {}); - (module3.exports = function(key2, value) { - return store[key2] || (store[key2] = value !== void 0 ? value : {}); - })("versions", []).push({ - version: "3.1.3", - mode: IS_PURE ? "pure" : "global", - copyright: "\xA9 2019 Denis Pushkarev (zloirock.ru)" - }); - } - ), - /***/ - "./node_modules/core-js/internals/string-at.js": ( - /*!*****************************************************!*\ - !*** ./node_modules/core-js/internals/string-at.js ***! - \*****************************************************/ - /*! no static exports found */ - /***/ - function(module3, exports3, __webpack_require__) { - var toInteger = __webpack_require__( - /*! ../internals/to-integer */ - "./node_modules/core-js/internals/to-integer.js" - ); - var requireObjectCoercible = __webpack_require__( - /*! ../internals/require-object-coercible */ - "./node_modules/core-js/internals/require-object-coercible.js" - ); - module3.exports = function(that, pos, CONVERT_TO_STRING) { - var S = String(requireObjectCoercible(that)); - var position = toInteger(pos); - var size = S.length; - var first2, second; - if (position < 0 || position >= size) - return CONVERT_TO_STRING ? "" : void 0; - first2 = S.charCodeAt(position); - return first2 < 55296 || first2 > 56319 || position + 1 === size || (second = S.charCodeAt(position + 1)) < 56320 || second > 57343 ? CONVERT_TO_STRING ? S.charAt(position) : first2 : CONVERT_TO_STRING ? S.slice(position, position + 2) : (first2 - 55296 << 10) + (second - 56320) + 65536; - }; - } - ), - /***/ - "./node_modules/core-js/internals/to-absolute-index.js": ( - /*!*************************************************************!*\ - !*** ./node_modules/core-js/internals/to-absolute-index.js ***! - \*************************************************************/ - /*! no static exports found */ - /***/ - function(module3, exports3, __webpack_require__) { - var toInteger = __webpack_require__( - /*! ../internals/to-integer */ - "./node_modules/core-js/internals/to-integer.js" - ); - var max = Math.max; - var min = Math.min; - module3.exports = function(index2, length) { - var integer = toInteger(index2); - return integer < 0 ? max(integer + length, 0) : min(integer, length); - }; - } - ), - /***/ - "./node_modules/core-js/internals/to-indexed-object.js": ( - /*!*************************************************************!*\ - !*** ./node_modules/core-js/internals/to-indexed-object.js ***! - \*************************************************************/ - /*! no static exports found */ - /***/ - function(module3, exports3, __webpack_require__) { - var IndexedObject = __webpack_require__( - /*! ../internals/indexed-object */ - "./node_modules/core-js/internals/indexed-object.js" - ); - var requireObjectCoercible = __webpack_require__( - /*! ../internals/require-object-coercible */ - "./node_modules/core-js/internals/require-object-coercible.js" - ); - module3.exports = function(it) { - return IndexedObject(requireObjectCoercible(it)); - }; - } - ), - /***/ - "./node_modules/core-js/internals/to-integer.js": ( - /*!******************************************************!*\ - !*** ./node_modules/core-js/internals/to-integer.js ***! - \******************************************************/ - /*! no static exports found */ - /***/ - function(module3, exports3) { - var ceil = Math.ceil; - var floor = Math.floor; - module3.exports = function(argument) { - return isNaN(argument = +argument) ? 0 : (argument > 0 ? floor : ceil)(argument); - }; - } - ), - /***/ - "./node_modules/core-js/internals/to-length.js": ( - /*!*****************************************************!*\ - !*** ./node_modules/core-js/internals/to-length.js ***! - \*****************************************************/ - /*! no static exports found */ - /***/ - function(module3, exports3, __webpack_require__) { - var toInteger = __webpack_require__( - /*! ../internals/to-integer */ - "./node_modules/core-js/internals/to-integer.js" - ); - var min = Math.min; - module3.exports = function(argument) { - return argument > 0 ? min(toInteger(argument), 9007199254740991) : 0; - }; - } - ), - /***/ - "./node_modules/core-js/internals/to-object.js": ( - /*!*****************************************************!*\ - !*** ./node_modules/core-js/internals/to-object.js ***! - \*****************************************************/ - /*! no static exports found */ - /***/ - function(module3, exports3, __webpack_require__) { - var requireObjectCoercible = __webpack_require__( - /*! ../internals/require-object-coercible */ - "./node_modules/core-js/internals/require-object-coercible.js" - ); - module3.exports = function(argument) { - return Object(requireObjectCoercible(argument)); - }; - } - ), - /***/ - "./node_modules/core-js/internals/to-primitive.js": ( - /*!********************************************************!*\ - !*** ./node_modules/core-js/internals/to-primitive.js ***! - \********************************************************/ - /*! no static exports found */ - /***/ - function(module3, exports3, __webpack_require__) { - var isObject2 = __webpack_require__( - /*! ../internals/is-object */ - "./node_modules/core-js/internals/is-object.js" - ); - module3.exports = function(it, S) { - if (!isObject2(it)) - return it; - var fn, val; - if (S && typeof (fn = it.toString) == "function" && !isObject2(val = fn.call(it))) - return val; - if (typeof (fn = it.valueOf) == "function" && !isObject2(val = fn.call(it))) - return val; - if (!S && typeof (fn = it.toString) == "function" && !isObject2(val = fn.call(it))) - return val; - throw TypeError("Can't convert object to primitive value"); - }; - } - ), - /***/ - "./node_modules/core-js/internals/uid.js": ( - /*!***********************************************!*\ - !*** ./node_modules/core-js/internals/uid.js ***! - \***********************************************/ - /*! no static exports found */ - /***/ - function(module3, exports3) { - var id = 0; - var postfix = Math.random(); - module3.exports = function(key2) { - return "Symbol(".concat(key2 === void 0 ? "" : key2, ")_", (++id + postfix).toString(36)); - }; - } - ), - /***/ - "./node_modules/core-js/internals/validate-set-prototype-of-arguments.js": ( - /*!*******************************************************************************!*\ - !*** ./node_modules/core-js/internals/validate-set-prototype-of-arguments.js ***! - \*******************************************************************************/ - /*! no static exports found */ - /***/ - function(module3, exports3, __webpack_require__) { - var isObject2 = __webpack_require__( - /*! ../internals/is-object */ - "./node_modules/core-js/internals/is-object.js" - ); - var anObject = __webpack_require__( - /*! ../internals/an-object */ - "./node_modules/core-js/internals/an-object.js" - ); - module3.exports = function(O, proto) { - anObject(O); - if (!isObject2(proto) && proto !== null) { - throw TypeError("Can't set " + String(proto) + " as a prototype"); - } - }; - } - ), - /***/ - "./node_modules/core-js/internals/well-known-symbol.js": ( - /*!*************************************************************!*\ - !*** ./node_modules/core-js/internals/well-known-symbol.js ***! - \*************************************************************/ - /*! no static exports found */ - /***/ - function(module3, exports3, __webpack_require__) { - var global2 = __webpack_require__( - /*! ../internals/global */ - "./node_modules/core-js/internals/global.js" - ); - var shared = __webpack_require__( - /*! ../internals/shared */ - "./node_modules/core-js/internals/shared.js" - ); - var uid = __webpack_require__( - /*! ../internals/uid */ - "./node_modules/core-js/internals/uid.js" - ); - var NATIVE_SYMBOL = __webpack_require__( - /*! ../internals/native-symbol */ - "./node_modules/core-js/internals/native-symbol.js" - ); - var Symbol2 = global2.Symbol; - var store = shared("wks"); - module3.exports = function(name) { - return store[name] || (store[name] = NATIVE_SYMBOL && Symbol2[name] || (NATIVE_SYMBOL ? Symbol2 : uid)("Symbol." + name)); - }; - } - ), - /***/ - "./node_modules/core-js/modules/es.array.from.js": ( - /*!*******************************************************!*\ - !*** ./node_modules/core-js/modules/es.array.from.js ***! - \*******************************************************/ - /*! no static exports found */ - /***/ - function(module3, exports3, __webpack_require__) { - var $ = __webpack_require__( - /*! ../internals/export */ - "./node_modules/core-js/internals/export.js" - ); - var from = __webpack_require__( - /*! ../internals/array-from */ - "./node_modules/core-js/internals/array-from.js" - ); - var checkCorrectnessOfIteration = __webpack_require__( - /*! ../internals/check-correctness-of-iteration */ - "./node_modules/core-js/internals/check-correctness-of-iteration.js" - ); - var INCORRECT_ITERATION = !checkCorrectnessOfIteration(function(iterable) { - Array.from(iterable); - }); - $({ target: "Array", stat: true, forced: INCORRECT_ITERATION }, { - from - }); - } - ), - /***/ - "./node_modules/core-js/modules/es.string.iterator.js": ( - /*!************************************************************!*\ - !*** ./node_modules/core-js/modules/es.string.iterator.js ***! - \************************************************************/ - /*! no static exports found */ - /***/ - function(module3, exports3, __webpack_require__) { - "use strict"; - var codePointAt = __webpack_require__( - /*! ../internals/string-at */ - "./node_modules/core-js/internals/string-at.js" - ); - var InternalStateModule = __webpack_require__( - /*! ../internals/internal-state */ - "./node_modules/core-js/internals/internal-state.js" - ); - var defineIterator = __webpack_require__( - /*! ../internals/define-iterator */ - "./node_modules/core-js/internals/define-iterator.js" - ); - var STRING_ITERATOR = "String Iterator"; - var setInternalState = InternalStateModule.set; - var getInternalState = InternalStateModule.getterFor(STRING_ITERATOR); - defineIterator(String, "String", function(iterated) { - setInternalState(this, { - type: STRING_ITERATOR, - string: String(iterated), - index: 0 - }); - }, function next() { - var state = getInternalState(this); - var string = state.string; - var index2 = state.index; - var point; - if (index2 >= string.length) - return { value: void 0, done: true }; - point = codePointAt(string, index2, true); - state.index += point.length; - return { value: point, done: false }; - }); - } - ), - /***/ - "./node_modules/webpack/buildin/global.js": ( - /*!***********************************!*\ - !*** (webpack)/buildin/global.js ***! - \***********************************/ - /*! no static exports found */ - /***/ - function(module3, exports3) { - var g; - g = /* @__PURE__ */ function() { - return this; - }(); - try { - g = g || Function("return this")() || (1, eval)("this"); - } catch (e) { - if (typeof window === "object") - g = window; - } - module3.exports = g; - } - ), - /***/ - "./src/default-attrs.json": ( - /*!********************************!*\ - !*** ./src/default-attrs.json ***! - \********************************/ - /*! exports provided: xmlns, width, height, viewBox, fill, stroke, stroke-width, stroke-linecap, stroke-linejoin, default */ - /***/ - function(module3) { - module3.exports = { "xmlns": "http://www.w3.org/2000/svg", "width": 24, "height": 24, "viewBox": "0 0 24 24", "fill": "none", "stroke": "currentColor", "stroke-width": 2, "stroke-linecap": "round", "stroke-linejoin": "round" }; - } - ), - /***/ - "./src/icon.js": ( - /*!*********************!*\ - !*** ./src/icon.js ***! - \*********************/ - /*! no static exports found */ - /***/ - function(module3, exports3, __webpack_require__) { - "use strict"; - Object.defineProperty(exports3, "__esModule", { - value: true - }); - var _extends = Object.assign || function(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - for (var key2 in source) { - if (Object.prototype.hasOwnProperty.call(source, key2)) { - target[key2] = source[key2]; - } - } - } - return target; - }; - var _createClass = /* @__PURE__ */ function() { - function defineProperties(target, props) { - for (var i = 0; i < props.length; i++) { - var descriptor = props[i]; - descriptor.enumerable = descriptor.enumerable || false; - descriptor.configurable = true; - if ("value" in descriptor) - descriptor.writable = true; - Object.defineProperty(target, descriptor.key, descriptor); - } - } - return function(Constructor, protoProps, staticProps) { - if (protoProps) - defineProperties(Constructor.prototype, protoProps); - if (staticProps) - defineProperties(Constructor, staticProps); - return Constructor; - }; - }(); - var _dedupe = __webpack_require__( - /*! classnames/dedupe */ - "./node_modules/classnames/dedupe.js" - ); - var _dedupe2 = _interopRequireDefault(_dedupe); - var _defaultAttrs = __webpack_require__( - /*! ./default-attrs.json */ - "./src/default-attrs.json" - ); - var _defaultAttrs2 = _interopRequireDefault(_defaultAttrs); - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { default: obj }; - } - function _classCallCheck(instance10, Constructor) { - if (!(instance10 instanceof Constructor)) { - throw new TypeError("Cannot call a class as a function"); - } - } - var Icon = function() { - function Icon2(name, contents) { - var tags = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : []; - _classCallCheck(this, Icon2); - this.name = name; - this.contents = contents; - this.tags = tags; - this.attrs = _extends({}, _defaultAttrs2.default, { class: "feather feather-" + name }); - } - _createClass(Icon2, [{ - key: "toSvg", - value: function toSvg() { - var attrs = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}; - var combinedAttrs = _extends({}, this.attrs, attrs, { class: (0, _dedupe2.default)(this.attrs.class, attrs.class) }); - return "" + this.contents + ""; - } - /** - * Return string representation of an `Icon`. - * - * Added for backward compatibility. If old code expects `feather.icons.` - * to be a string, `toString()` will get implicitly called. - * - * @returns {string} - */ - }, { - key: "toString", - value: function toString() { - return this.contents; - } - }]); - return Icon2; - }(); - function attrsToString(attrs) { - return Object.keys(attrs).map(function(key2) { - return key2 + '="' + attrs[key2] + '"'; - }).join(" "); - } - exports3.default = Icon; - } - ), - /***/ - "./src/icons.js": ( - /*!**********************!*\ - !*** ./src/icons.js ***! - \**********************/ - /*! no static exports found */ - /***/ - function(module3, exports3, __webpack_require__) { - "use strict"; - Object.defineProperty(exports3, "__esModule", { - value: true - }); - var _icon = __webpack_require__( - /*! ./icon */ - "./src/icon.js" - ); - var _icon2 = _interopRequireDefault(_icon); - var _icons = __webpack_require__( - /*! ../dist/icons.json */ - "./dist/icons.json" - ); - var _icons2 = _interopRequireDefault(_icons); - var _tags = __webpack_require__( - /*! ./tags.json */ - "./src/tags.json" - ); - var _tags2 = _interopRequireDefault(_tags); - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { default: obj }; - } - exports3.default = Object.keys(_icons2.default).map(function(key2) { - return new _icon2.default(key2, _icons2.default[key2], _tags2.default[key2]); - }).reduce(function(object, icon) { - object[icon.name] = icon; - return object; - }, {}); - } - ), - /***/ - "./src/index.js": ( - /*!**********************!*\ - !*** ./src/index.js ***! - \**********************/ - /*! no static exports found */ - /***/ - function(module3, exports3, __webpack_require__) { - "use strict"; - var _icons = __webpack_require__( - /*! ./icons */ - "./src/icons.js" - ); - var _icons2 = _interopRequireDefault(_icons); - var _toSvg = __webpack_require__( - /*! ./to-svg */ - "./src/to-svg.js" - ); - var _toSvg2 = _interopRequireDefault(_toSvg); - var _replace = __webpack_require__( - /*! ./replace */ - "./src/replace.js" - ); - var _replace2 = _interopRequireDefault(_replace); - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { default: obj }; - } - module3.exports = { icons: _icons2.default, toSvg: _toSvg2.default, replace: _replace2.default }; - } - ), - /***/ - "./src/replace.js": ( - /*!************************!*\ - !*** ./src/replace.js ***! - \************************/ - /*! no static exports found */ - /***/ - function(module3, exports3, __webpack_require__) { - "use strict"; - Object.defineProperty(exports3, "__esModule", { - value: true - }); - var _extends = Object.assign || function(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - for (var key2 in source) { - if (Object.prototype.hasOwnProperty.call(source, key2)) { - target[key2] = source[key2]; - } - } - } - return target; - }; - var _dedupe = __webpack_require__( - /*! classnames/dedupe */ - "./node_modules/classnames/dedupe.js" - ); - var _dedupe2 = _interopRequireDefault(_dedupe); - var _icons = __webpack_require__( - /*! ./icons */ - "./src/icons.js" - ); - var _icons2 = _interopRequireDefault(_icons); - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { default: obj }; - } - function replace() { - var attrs = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}; - if (typeof document === "undefined") { - throw new Error("`feather.replace()` only works in a browser environment."); - } - var elementsToReplace = document.querySelectorAll("[data-feather]"); - Array.from(elementsToReplace).forEach(function(element2) { - return replaceElement(element2, attrs); - }); - } - function replaceElement(element2) { - var attrs = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}; - var elementAttrs = getAttrs(element2); - var name = elementAttrs["data-feather"]; - delete elementAttrs["data-feather"]; - var svgString = _icons2.default[name].toSvg(_extends({}, attrs, elementAttrs, { class: (0, _dedupe2.default)(attrs.class, elementAttrs.class) })); - var svgDocument = new DOMParser().parseFromString(svgString, "image/svg+xml"); - var svgElement = svgDocument.querySelector("svg"); - element2.parentNode.replaceChild(svgElement, element2); - } - function getAttrs(element2) { - return Array.from(element2.attributes).reduce(function(attrs, attr2) { - attrs[attr2.name] = attr2.value; - return attrs; - }, {}); - } - exports3.default = replace; - } - ), - /***/ - "./src/tags.json": ( - /*!***********************!*\ - !*** ./src/tags.json ***! - \***********************/ - /*! exports provided: activity, airplay, alert-circle, alert-octagon, alert-triangle, align-center, align-justify, align-left, align-right, anchor, archive, at-sign, award, aperture, bar-chart, bar-chart-2, battery, battery-charging, bell, bell-off, bluetooth, book-open, book, bookmark, box, briefcase, calendar, camera, cast, chevron-down, chevron-up, circle, clipboard, clock, cloud-drizzle, cloud-lightning, cloud-rain, cloud-snow, cloud, codepen, codesandbox, code, coffee, columns, command, compass, copy, corner-down-left, corner-down-right, corner-left-down, corner-left-up, corner-right-down, corner-right-up, corner-up-left, corner-up-right, cpu, credit-card, crop, crosshair, database, delete, disc, dollar-sign, droplet, edit, edit-2, edit-3, eye, eye-off, external-link, facebook, fast-forward, figma, file-minus, file-plus, file-text, film, filter, flag, folder-minus, folder-plus, folder, framer, frown, gift, git-branch, git-commit, git-merge, git-pull-request, github, gitlab, globe, hard-drive, hash, headphones, heart, help-circle, hexagon, home, image, inbox, instagram, key, layers, layout, life-buoy, link, link-2, linkedin, list, lock, log-in, log-out, mail, map-pin, map, maximize, maximize-2, meh, menu, message-circle, message-square, mic-off, mic, minimize, minimize-2, minus, monitor, moon, more-horizontal, more-vertical, mouse-pointer, move, music, navigation, navigation-2, octagon, package, paperclip, pause, pause-circle, pen-tool, percent, phone-call, phone-forwarded, phone-incoming, phone-missed, phone-off, phone-outgoing, phone, play, pie-chart, play-circle, plus, plus-circle, plus-square, pocket, power, printer, radio, refresh-cw, refresh-ccw, repeat, rewind, rotate-ccw, rotate-cw, rss, save, scissors, search, send, settings, share-2, shield, shield-off, shopping-bag, shopping-cart, shuffle, skip-back, skip-forward, slack, slash, sliders, smartphone, smile, speaker, star, stop-circle, sun, sunrise, sunset, tablet, tag, target, terminal, thermometer, thumbs-down, thumbs-up, toggle-left, toggle-right, tool, trash, trash-2, triangle, truck, tv, twitch, twitter, type, umbrella, unlock, user-check, user-minus, user-plus, user-x, user, users, video-off, video, voicemail, volume, volume-1, volume-2, volume-x, watch, wifi-off, wifi, wind, x-circle, x-octagon, x-square, x, youtube, zap-off, zap, zoom-in, zoom-out, default */ - /***/ - function(module3) { - module3.exports = { "activity": ["pulse", "health", "action", "motion"], "airplay": ["stream", "cast", "mirroring"], "alert-circle": ["warning", "alert", "danger"], "alert-octagon": ["warning", "alert", "danger"], "alert-triangle": ["warning", "alert", "danger"], "align-center": ["text alignment", "center"], "align-justify": ["text alignment", "justified"], "align-left": ["text alignment", "left"], "align-right": ["text alignment", "right"], "anchor": [], "archive": ["index", "box"], "at-sign": ["mention", "at", "email", "message"], "award": ["achievement", "badge"], "aperture": ["camera", "photo"], "bar-chart": ["statistics", "diagram", "graph"], "bar-chart-2": ["statistics", "diagram", "graph"], "battery": ["power", "electricity"], "battery-charging": ["power", "electricity"], "bell": ["alarm", "notification", "sound"], "bell-off": ["alarm", "notification", "silent"], "bluetooth": ["wireless"], "book-open": ["read", "library"], "book": ["read", "dictionary", "booklet", "magazine", "library"], "bookmark": ["read", "clip", "marker", "tag"], "box": ["cube"], "briefcase": ["work", "bag", "baggage", "folder"], "calendar": ["date"], "camera": ["photo"], "cast": ["chromecast", "airplay"], "chevron-down": ["expand"], "chevron-up": ["collapse"], "circle": ["off", "zero", "record"], "clipboard": ["copy"], "clock": ["time", "watch", "alarm"], "cloud-drizzle": ["weather", "shower"], "cloud-lightning": ["weather", "bolt"], "cloud-rain": ["weather"], "cloud-snow": ["weather", "blizzard"], "cloud": ["weather"], "codepen": ["logo"], "codesandbox": ["logo"], "code": ["source", "programming"], "coffee": ["drink", "cup", "mug", "tea", "cafe", "hot", "beverage"], "columns": ["layout"], "command": ["keyboard", "cmd", "terminal", "prompt"], "compass": ["navigation", "safari", "travel", "direction"], "copy": ["clone", "duplicate"], "corner-down-left": ["arrow", "return"], "corner-down-right": ["arrow"], "corner-left-down": ["arrow"], "corner-left-up": ["arrow"], "corner-right-down": ["arrow"], "corner-right-up": ["arrow"], "corner-up-left": ["arrow"], "corner-up-right": ["arrow"], "cpu": ["processor", "technology"], "credit-card": ["purchase", "payment", "cc"], "crop": ["photo", "image"], "crosshair": ["aim", "target"], "database": ["storage", "memory"], "delete": ["remove"], "disc": ["album", "cd", "dvd", "music"], "dollar-sign": ["currency", "money", "payment"], "droplet": ["water"], "edit": ["pencil", "change"], "edit-2": ["pencil", "change"], "edit-3": ["pencil", "change"], "eye": ["view", "watch"], "eye-off": ["view", "watch", "hide", "hidden"], "external-link": ["outbound"], "facebook": ["logo", "social"], "fast-forward": ["music"], "figma": ["logo", "design", "tool"], "file-minus": ["delete", "remove", "erase"], "file-plus": ["add", "create", "new"], "file-text": ["data", "txt", "pdf"], "film": ["movie", "video"], "filter": ["funnel", "hopper"], "flag": ["report"], "folder-minus": ["directory"], "folder-plus": ["directory"], "folder": ["directory"], "framer": ["logo", "design", "tool"], "frown": ["emoji", "face", "bad", "sad", "emotion"], "gift": ["present", "box", "birthday", "party"], "git-branch": ["code", "version control"], "git-commit": ["code", "version control"], "git-merge": ["code", "version control"], "git-pull-request": ["code", "version control"], "github": ["logo", "version control"], "gitlab": ["logo", "version control"], "globe": ["world", "browser", "language", "translate"], "hard-drive": ["computer", "server", "memory", "data"], "hash": ["hashtag", "number", "pound"], "headphones": ["music", "audio", "sound"], "heart": ["like", "love", "emotion"], "help-circle": ["question mark"], "hexagon": ["shape", "node.js", "logo"], "home": ["house", "living"], "image": ["picture"], "inbox": ["email"], "instagram": ["logo", "camera"], "key": ["password", "login", "authentication", "secure"], "layers": ["stack"], "layout": ["window", "webpage"], "life-buoy": ["help", "life ring", "support"], "link": ["chain", "url"], "link-2": ["chain", "url"], "linkedin": ["logo", "social media"], "list": ["options"], "lock": ["security", "password", "secure"], "log-in": ["sign in", "arrow", "enter"], "log-out": ["sign out", "arrow", "exit"], "mail": ["email", "message"], "map-pin": ["location", "navigation", "travel", "marker"], "map": ["location", "navigation", "travel"], "maximize": ["fullscreen"], "maximize-2": ["fullscreen", "arrows", "expand"], "meh": ["emoji", "face", "neutral", "emotion"], "menu": ["bars", "navigation", "hamburger"], "message-circle": ["comment", "chat"], "message-square": ["comment", "chat"], "mic-off": ["record", "sound", "mute"], "mic": ["record", "sound", "listen"], "minimize": ["exit fullscreen", "close"], "minimize-2": ["exit fullscreen", "arrows", "close"], "minus": ["subtract"], "monitor": ["tv", "screen", "display"], "moon": ["dark", "night"], "more-horizontal": ["ellipsis"], "more-vertical": ["ellipsis"], "mouse-pointer": ["arrow", "cursor"], "move": ["arrows"], "music": ["note"], "navigation": ["location", "travel"], "navigation-2": ["location", "travel"], "octagon": ["stop"], "package": ["box", "container"], "paperclip": ["attachment"], "pause": ["music", "stop"], "pause-circle": ["music", "audio", "stop"], "pen-tool": ["vector", "drawing"], "percent": ["discount"], "phone-call": ["ring"], "phone-forwarded": ["call"], "phone-incoming": ["call"], "phone-missed": ["call"], "phone-off": ["call", "mute"], "phone-outgoing": ["call"], "phone": ["call"], "play": ["music", "start"], "pie-chart": ["statistics", "diagram"], "play-circle": ["music", "start"], "plus": ["add", "new"], "plus-circle": ["add", "new"], "plus-square": ["add", "new"], "pocket": ["logo", "save"], "power": ["on", "off"], "printer": ["fax", "office", "device"], "radio": ["signal"], "refresh-cw": ["synchronise", "arrows"], "refresh-ccw": ["arrows"], "repeat": ["loop", "arrows"], "rewind": ["music"], "rotate-ccw": ["arrow"], "rotate-cw": ["arrow"], "rss": ["feed", "subscribe"], "save": ["floppy disk"], "scissors": ["cut"], "search": ["find", "magnifier", "magnifying glass"], "send": ["message", "mail", "email", "paper airplane", "paper aeroplane"], "settings": ["cog", "edit", "gear", "preferences"], "share-2": ["network", "connections"], "shield": ["security", "secure"], "shield-off": ["security", "insecure"], "shopping-bag": ["ecommerce", "cart", "purchase", "store"], "shopping-cart": ["ecommerce", "cart", "purchase", "store"], "shuffle": ["music"], "skip-back": ["music"], "skip-forward": ["music"], "slack": ["logo"], "slash": ["ban", "no"], "sliders": ["settings", "controls"], "smartphone": ["cellphone", "device"], "smile": ["emoji", "face", "happy", "good", "emotion"], "speaker": ["audio", "music"], "star": ["bookmark", "favorite", "like"], "stop-circle": ["media", "music"], "sun": ["brightness", "weather", "light"], "sunrise": ["weather", "time", "morning", "day"], "sunset": ["weather", "time", "evening", "night"], "tablet": ["device"], "tag": ["label"], "target": ["logo", "bullseye"], "terminal": ["code", "command line", "prompt"], "thermometer": ["temperature", "celsius", "fahrenheit", "weather"], "thumbs-down": ["dislike", "bad", "emotion"], "thumbs-up": ["like", "good", "emotion"], "toggle-left": ["on", "off", "switch"], "toggle-right": ["on", "off", "switch"], "tool": ["settings", "spanner"], "trash": ["garbage", "delete", "remove", "bin"], "trash-2": ["garbage", "delete", "remove", "bin"], "triangle": ["delta"], "truck": ["delivery", "van", "shipping", "transport", "lorry"], "tv": ["television", "stream"], "twitch": ["logo"], "twitter": ["logo", "social"], "type": ["text"], "umbrella": ["rain", "weather"], "unlock": ["security"], "user-check": ["followed", "subscribed"], "user-minus": ["delete", "remove", "unfollow", "unsubscribe"], "user-plus": ["new", "add", "create", "follow", "subscribe"], "user-x": ["delete", "remove", "unfollow", "unsubscribe", "unavailable"], "user": ["person", "account"], "users": ["group"], "video-off": ["camera", "movie", "film"], "video": ["camera", "movie", "film"], "voicemail": ["phone"], "volume": ["music", "sound", "mute"], "volume-1": ["music", "sound"], "volume-2": ["music", "sound"], "volume-x": ["music", "sound", "mute"], "watch": ["clock", "time"], "wifi-off": ["disabled"], "wifi": ["connection", "signal", "wireless"], "wind": ["weather", "air"], "x-circle": ["cancel", "close", "delete", "remove", "times", "clear"], "x-octagon": ["delete", "stop", "alert", "warning", "times", "clear"], "x-square": ["cancel", "close", "delete", "remove", "times", "clear"], "x": ["cancel", "close", "delete", "remove", "times", "clear"], "youtube": ["logo", "video", "play"], "zap-off": ["flash", "camera", "lightning"], "zap": ["flash", "camera", "lightning"], "zoom-in": ["magnifying glass"], "zoom-out": ["magnifying glass"] }; - } - ), - /***/ - "./src/to-svg.js": ( - /*!***********************!*\ - !*** ./src/to-svg.js ***! - \***********************/ - /*! no static exports found */ - /***/ - function(module3, exports3, __webpack_require__) { - "use strict"; - Object.defineProperty(exports3, "__esModule", { - value: true - }); - var _icons = __webpack_require__( - /*! ./icons */ - "./src/icons.js" - ); - var _icons2 = _interopRequireDefault(_icons); - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { default: obj }; - } - function toSvg(name) { - var attrs = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}; - console.warn("feather.toSvg() is deprecated. Please use feather.icons[name].toSvg() instead."); - if (!name) { - throw new Error("The required `key` (icon name) parameter is missing."); - } - if (!_icons2.default[name]) { - throw new Error("No icon matching '" + name + "'. See the complete list of icons at https://feathericons.com"); - } - return _icons2.default[name].toSvg(attrs); - } - exports3.default = toSvg; - } - ), - /***/ - 0: ( - /*!**************************************************!*\ - !*** multi core-js/es/array/from ./src/index.js ***! - \**************************************************/ - /*! no static exports found */ - /***/ - function(module3, exports3, __webpack_require__) { - __webpack_require__( - /*! core-js/es/array/from */ - "./node_modules/core-js/es/array/from.js" - ); - module3.exports = __webpack_require__( - /*! /home/runner/work/feather/feather/src/index.js */ - "./src/index.js" - ); - } - ) - /******/ - }) - ); - }); - } -}); - -// src/main.ts -var main_exports = {}; -__export(main_exports, { - default: () => ObsidianGit -}); -module.exports = __toCommonJS(main_exports); -init_polyfill_buffer(); - -// node_modules/.pnpm/isomorphic-git@1.25.3/node_modules/isomorphic-git/index.js -init_polyfill_buffer(); -var import_async_lock = __toESM(require_async_lock(), 1); -var import_sha1 = __toESM(require_sha1(), 1); -var import_crc_32 = __toESM(require_crc32(), 1); -var import_pako = __toESM(require_pako(), 1); -var import_pify = __toESM(require_pify(), 1); -var import_ignore = __toESM(require_ignore(), 1); -var import_clean_git_ref = __toESM(require_lib2(), 1); -var import_diff3 = __toESM(require_diff3(), 1); -var BaseError = class _BaseError extends Error { - constructor(message) { - super(message); - this.caller = ""; - } - toJSON() { - return { - code: this.code, - data: this.data, - caller: this.caller, - message: this.message, - stack: this.stack - }; - } - fromJSON(json) { - const e = new _BaseError(json.message); - e.code = json.code; - e.data = json.data; - e.caller = json.caller; - e.stack = json.stack; - return e; - } - get isIsomorphicGitError() { - return true; - } -}; -var UnmergedPathsError = class _UnmergedPathsError extends BaseError { - /** - * @param {Array} filepaths - */ - constructor(filepaths) { - super( - `Modifying the index is not possible because you have unmerged files: ${filepaths.toString}. Fix them up in the work tree, and then use 'git add/rm as appropriate to mark resolution and make a commit.` - ); - this.code = this.name = _UnmergedPathsError.code; - this.data = { filepaths }; - } -}; -UnmergedPathsError.code = "UnmergedPathsError"; -var InternalError = class _InternalError extends BaseError { - /** - * @param {string} message - */ - constructor(message) { - super( - `An internal error caused this command to fail. Please file a bug report at https://github.com/isomorphic-git/isomorphic-git/issues with this error message: ${message}` - ); - this.code = this.name = _InternalError.code; - this.data = { message }; - } -}; -InternalError.code = "InternalError"; -var UnsafeFilepathError = class _UnsafeFilepathError extends BaseError { - /** - * @param {string} filepath - */ - constructor(filepath) { - super(`The filepath "${filepath}" contains unsafe character sequences`); - this.code = this.name = _UnsafeFilepathError.code; - this.data = { filepath }; - } -}; -UnsafeFilepathError.code = "UnsafeFilepathError"; -var BufferCursor = class { - constructor(buffer2) { - this.buffer = buffer2; - this._start = 0; - } - eof() { - return this._start >= this.buffer.length; - } - tell() { - return this._start; - } - seek(n) { - this._start = n; - } - slice(n) { - const r = this.buffer.slice(this._start, this._start + n); - this._start += n; - return r; - } - toString(enc, length) { - const r = this.buffer.toString(enc, this._start, this._start + length); - this._start += length; - return r; - } - write(value, length, enc) { - const r = this.buffer.write(value, this._start, length, enc); - this._start += length; - return r; - } - copy(source, start, end) { - const r = source.copy(this.buffer, this._start, start, end); - this._start += r; - return r; - } - readUInt8() { - const r = this.buffer.readUInt8(this._start); - this._start += 1; - return r; - } - writeUInt8(value) { - const r = this.buffer.writeUInt8(value, this._start); - this._start += 1; - return r; - } - readUInt16BE() { - const r = this.buffer.readUInt16BE(this._start); - this._start += 2; - return r; - } - writeUInt16BE(value) { - const r = this.buffer.writeUInt16BE(value, this._start); - this._start += 2; - return r; - } - readUInt32BE() { - const r = this.buffer.readUInt32BE(this._start); - this._start += 4; - return r; - } - writeUInt32BE(value) { - const r = this.buffer.writeUInt32BE(value, this._start); - this._start += 4; - return r; - } -}; -function compareStrings(a, b) { - return -(a < b) || +(a > b); -} -function comparePath(a, b) { - return compareStrings(a.path, b.path); -} -function normalizeMode(mode) { - let type = mode > 0 ? mode >> 12 : 0; - if (type !== 4 && type !== 8 && type !== 10 && type !== 14) { - type = 8; - } - let permissions = mode & 511; - if (permissions & 73) { - permissions = 493; - } else { - permissions = 420; - } - if (type !== 8) - permissions = 0; - return (type << 12) + permissions; -} -var MAX_UINT32 = 2 ** 32; -function SecondsNanoseconds(givenSeconds, givenNanoseconds, milliseconds, date) { - if (givenSeconds !== void 0 && givenNanoseconds !== void 0) { - return [givenSeconds, givenNanoseconds]; - } - if (milliseconds === void 0) { - milliseconds = date.valueOf(); - } - const seconds = Math.floor(milliseconds / 1e3); - const nanoseconds = (milliseconds - seconds * 1e3) * 1e6; - return [seconds, nanoseconds]; -} -function normalizeStats(e) { - const [ctimeSeconds, ctimeNanoseconds] = SecondsNanoseconds( - e.ctimeSeconds, - e.ctimeNanoseconds, - e.ctimeMs, - e.ctime - ); - const [mtimeSeconds, mtimeNanoseconds] = SecondsNanoseconds( - e.mtimeSeconds, - e.mtimeNanoseconds, - e.mtimeMs, - e.mtime - ); - return { - ctimeSeconds: ctimeSeconds % MAX_UINT32, - ctimeNanoseconds: ctimeNanoseconds % MAX_UINT32, - mtimeSeconds: mtimeSeconds % MAX_UINT32, - mtimeNanoseconds: mtimeNanoseconds % MAX_UINT32, - dev: e.dev % MAX_UINT32, - ino: e.ino % MAX_UINT32, - mode: normalizeMode(e.mode % MAX_UINT32), - uid: e.uid % MAX_UINT32, - gid: e.gid % MAX_UINT32, - // size of -1 happens over a BrowserFS HTTP Backend that doesn't serve Content-Length headers - // (like the Karma webserver) because BrowserFS HTTP Backend uses HTTP HEAD requests to do fs.stat - size: e.size > -1 ? e.size % MAX_UINT32 : 0 - }; -} -function toHex(buffer2) { - let hex = ""; - for (const byte of new Uint8Array(buffer2)) { - if (byte < 16) - hex += "0"; - hex += byte.toString(16); - } - return hex; -} -var supportsSubtleSHA1 = null; -async function shasum(buffer2) { - if (supportsSubtleSHA1 === null) { - supportsSubtleSHA1 = await testSubtleSHA1(); - } - return supportsSubtleSHA1 ? subtleSHA1(buffer2) : shasumSync(buffer2); -} -function shasumSync(buffer2) { - return new import_sha1.default().update(buffer2).digest("hex"); -} -async function subtleSHA1(buffer2) { - const hash2 = await crypto.subtle.digest("SHA-1", buffer2); - return toHex(hash2); -} -async function testSubtleSHA1() { - try { - const hash2 = await subtleSHA1(new Uint8Array([])); - if (hash2 === "da39a3ee5e6b4b0d3255bfef95601890afd80709") - return true; - } catch (_) { - } - return false; -} -function parseCacheEntryFlags(bits) { - return { - assumeValid: Boolean(bits & 32768), - extended: Boolean(bits & 16384), - stage: (bits & 12288) >> 12, - nameLength: bits & 4095 - }; -} -function renderCacheEntryFlags(entry) { - const flags = entry.flags; - flags.extended = false; - flags.nameLength = Math.min(Buffer.from(entry.path).length, 4095); - return (flags.assumeValid ? 32768 : 0) + (flags.extended ? 16384 : 0) + ((flags.stage & 3) << 12) + (flags.nameLength & 4095); -} -var GitIndex = class _GitIndex { - /*:: - _entries: Map - _dirty: boolean // Used to determine if index needs to be saved to filesystem - */ - constructor(entries, unmergedPaths) { - this._dirty = false; - this._unmergedPaths = unmergedPaths || /* @__PURE__ */ new Set(); - this._entries = entries || /* @__PURE__ */ new Map(); - } - _addEntry(entry) { - if (entry.flags.stage === 0) { - entry.stages = [entry]; - this._entries.set(entry.path, entry); - this._unmergedPaths.delete(entry.path); - } else { - let existingEntry = this._entries.get(entry.path); - if (!existingEntry) { - this._entries.set(entry.path, entry); - existingEntry = entry; - } - existingEntry.stages[entry.flags.stage] = entry; - this._unmergedPaths.add(entry.path); - } - } - static async from(buffer2) { - if (Buffer.isBuffer(buffer2)) { - return _GitIndex.fromBuffer(buffer2); - } else if (buffer2 === null) { - return new _GitIndex(null); - } else { - throw new InternalError("invalid type passed to GitIndex.from"); - } - } - static async fromBuffer(buffer2) { - if (buffer2.length === 0) { - throw new InternalError("Index file is empty (.git/index)"); - } - const index2 = new _GitIndex(); - const reader = new BufferCursor(buffer2); - const magic = reader.toString("utf8", 4); - if (magic !== "DIRC") { - throw new InternalError(`Invalid dircache magic file number: ${magic}`); - } - const shaComputed = await shasum(buffer2.slice(0, -20)); - const shaClaimed = buffer2.slice(-20).toString("hex"); - if (shaClaimed !== shaComputed) { - throw new InternalError( - `Invalid checksum in GitIndex buffer: expected ${shaClaimed} but saw ${shaComputed}` - ); - } - const version2 = reader.readUInt32BE(); - if (version2 !== 2) { - throw new InternalError(`Unsupported dircache version: ${version2}`); - } - const numEntries = reader.readUInt32BE(); - let i = 0; - while (!reader.eof() && i < numEntries) { - const entry = {}; - entry.ctimeSeconds = reader.readUInt32BE(); - entry.ctimeNanoseconds = reader.readUInt32BE(); - entry.mtimeSeconds = reader.readUInt32BE(); - entry.mtimeNanoseconds = reader.readUInt32BE(); - entry.dev = reader.readUInt32BE(); - entry.ino = reader.readUInt32BE(); - entry.mode = reader.readUInt32BE(); - entry.uid = reader.readUInt32BE(); - entry.gid = reader.readUInt32BE(); - entry.size = reader.readUInt32BE(); - entry.oid = reader.slice(20).toString("hex"); - const flags = reader.readUInt16BE(); - entry.flags = parseCacheEntryFlags(flags); - const pathlength = buffer2.indexOf(0, reader.tell() + 1) - reader.tell(); - if (pathlength < 1) { - throw new InternalError(`Got a path length of: ${pathlength}`); - } - entry.path = reader.toString("utf8", pathlength); - if (entry.path.includes("..\\") || entry.path.includes("../")) { - throw new UnsafeFilepathError(entry.path); - } - let padding = 8 - (reader.tell() - 12) % 8; - if (padding === 0) - padding = 8; - while (padding--) { - const tmp = reader.readUInt8(); - if (tmp !== 0) { - throw new InternalError( - `Expected 1-8 null characters but got '${tmp}' after ${entry.path}` - ); - } else if (reader.eof()) { - throw new InternalError("Unexpected end of file"); - } - } - entry.stages = []; - index2._addEntry(entry); - i++; - } - return index2; - } - get unmergedPaths() { - return [...this._unmergedPaths]; - } - get entries() { - return [...this._entries.values()].sort(comparePath); - } - get entriesMap() { - return this._entries; - } - get entriesFlat() { - return [...this.entries].flatMap((entry) => { - return entry.stages.length > 1 ? entry.stages.filter((x) => x) : entry; - }); - } - *[Symbol.iterator]() { - for (const entry of this.entries) { - yield entry; - } - } - insert({ filepath, stats, oid, stage = 0 }) { - if (!stats) { - stats = { - ctimeSeconds: 0, - ctimeNanoseconds: 0, - mtimeSeconds: 0, - mtimeNanoseconds: 0, - dev: 0, - ino: 0, - mode: 0, - uid: 0, - gid: 0, - size: 0 - }; - } - stats = normalizeStats(stats); - const bfilepath = Buffer.from(filepath); - const entry = { - ctimeSeconds: stats.ctimeSeconds, - ctimeNanoseconds: stats.ctimeNanoseconds, - mtimeSeconds: stats.mtimeSeconds, - mtimeNanoseconds: stats.mtimeNanoseconds, - dev: stats.dev, - ino: stats.ino, - // We provide a fallback value for `mode` here because not all fs - // implementations assign it, but we use it in GitTree. - // '100644' is for a "regular non-executable file" - mode: stats.mode || 33188, - uid: stats.uid, - gid: stats.gid, - size: stats.size, - path: filepath, - oid, - flags: { - assumeValid: false, - extended: false, - stage, - nameLength: bfilepath.length < 4095 ? bfilepath.length : 4095 - }, - stages: [] - }; - this._addEntry(entry); - this._dirty = true; - } - delete({ filepath }) { - if (this._entries.has(filepath)) { - this._entries.delete(filepath); - } else { - for (const key2 of this._entries.keys()) { - if (key2.startsWith(filepath + "/")) { - this._entries.delete(key2); - } - } - } - if (this._unmergedPaths.has(filepath)) { - this._unmergedPaths.delete(filepath); - } - this._dirty = true; - } - clear() { - this._entries.clear(); - this._dirty = true; - } - has({ filepath }) { - return this._entries.has(filepath); - } - render() { - return this.entries.map((entry) => `${entry.mode.toString(8)} ${entry.oid} ${entry.path}`).join("\n"); - } - static async _entryToBuffer(entry) { - const bpath = Buffer.from(entry.path); - const length = Math.ceil((62 + bpath.length + 1) / 8) * 8; - const written = Buffer.alloc(length); - const writer = new BufferCursor(written); - const stat = normalizeStats(entry); - writer.writeUInt32BE(stat.ctimeSeconds); - writer.writeUInt32BE(stat.ctimeNanoseconds); - writer.writeUInt32BE(stat.mtimeSeconds); - writer.writeUInt32BE(stat.mtimeNanoseconds); - writer.writeUInt32BE(stat.dev); - writer.writeUInt32BE(stat.ino); - writer.writeUInt32BE(stat.mode); - writer.writeUInt32BE(stat.uid); - writer.writeUInt32BE(stat.gid); - writer.writeUInt32BE(stat.size); - writer.write(entry.oid, 20, "hex"); - writer.writeUInt16BE(renderCacheEntryFlags(entry)); - writer.write(entry.path, bpath.length, "utf8"); - return written; - } - async toObject() { - const header = Buffer.alloc(12); - const writer = new BufferCursor(header); - writer.write("DIRC", 4, "utf8"); - writer.writeUInt32BE(2); - writer.writeUInt32BE(this.entriesFlat.length); - let entryBuffers = []; - for (const entry of this.entries) { - entryBuffers.push(_GitIndex._entryToBuffer(entry)); - if (entry.stages.length > 1) { - for (const stage of entry.stages) { - if (stage && stage !== entry) { - entryBuffers.push(_GitIndex._entryToBuffer(stage)); - } - } - } - } - entryBuffers = await Promise.all(entryBuffers); - const body = Buffer.concat(entryBuffers); - const main = Buffer.concat([header, body]); - const sum = await shasum(main); - return Buffer.concat([main, Buffer.from(sum, "hex")]); - } -}; -function compareStats(entry, stats) { - const e = normalizeStats(entry); - const s = normalizeStats(stats); - const staleness = e.mode !== s.mode || e.mtimeSeconds !== s.mtimeSeconds || e.ctimeSeconds !== s.ctimeSeconds || e.uid !== s.uid || e.gid !== s.gid || e.ino !== s.ino || e.size !== s.size; - return staleness; -} -var lock = null; -var IndexCache = Symbol("IndexCache"); -function createCache() { - return { - map: /* @__PURE__ */ new Map(), - stats: /* @__PURE__ */ new Map() - }; -} -async function updateCachedIndexFile(fs, filepath, cache) { - const stat = await fs.lstat(filepath); - const rawIndexFile = await fs.read(filepath); - const index2 = await GitIndex.from(rawIndexFile); - cache.map.set(filepath, index2); - cache.stats.set(filepath, stat); -} -async function isIndexStale(fs, filepath, cache) { - const savedStats = cache.stats.get(filepath); - if (savedStats === void 0) - return true; - const currStats = await fs.lstat(filepath); - if (savedStats === null) - return false; - if (currStats === null) - return false; - return compareStats(savedStats, currStats); -} -var GitIndexManager = class { - /** - * - * @param {object} opts - * @param {import('../models/FileSystem.js').FileSystem} opts.fs - * @param {string} opts.gitdir - * @param {object} opts.cache - * @param {bool} opts.allowUnmerged - * @param {function(GitIndex): any} closure - */ - static async acquire({ fs, gitdir, cache, allowUnmerged = true }, closure) { - if (!cache[IndexCache]) - cache[IndexCache] = createCache(); - const filepath = `${gitdir}/index`; - if (lock === null) - lock = new import_async_lock.default({ maxPending: Infinity }); - let result; - let unmergedPaths = []; - await lock.acquire(filepath, async () => { - if (await isIndexStale(fs, filepath, cache[IndexCache])) { - await updateCachedIndexFile(fs, filepath, cache[IndexCache]); - } - const index2 = cache[IndexCache].map.get(filepath); - unmergedPaths = index2.unmergedPaths; - if (unmergedPaths.length && !allowUnmerged) - throw new UnmergedPathsError(unmergedPaths); - result = await closure(index2); - if (index2._dirty) { - const buffer2 = await index2.toObject(); - await fs.write(filepath, buffer2); - cache[IndexCache].stats.set(filepath, await fs.lstat(filepath)); - index2._dirty = false; - } - }); - return result; - } -}; -function basename(path2) { - const last2 = Math.max(path2.lastIndexOf("/"), path2.lastIndexOf("\\")); - if (last2 > -1) { - path2 = path2.slice(last2 + 1); - } - return path2; -} -function dirname(path2) { - const last2 = Math.max(path2.lastIndexOf("/"), path2.lastIndexOf("\\")); - if (last2 === -1) - return "."; - if (last2 === 0) - return "/"; - return path2.slice(0, last2); -} -function flatFileListToDirectoryStructure(files) { - const inodes = /* @__PURE__ */ new Map(); - const mkdir = function(name) { - if (!inodes.has(name)) { - const dir = { - type: "tree", - fullpath: name, - basename: basename(name), - metadata: {}, - children: [] - }; - inodes.set(name, dir); - dir.parent = mkdir(dirname(name)); - if (dir.parent && dir.parent !== dir) - dir.parent.children.push(dir); - } - return inodes.get(name); - }; - const mkfile = function(name, metadata) { - if (!inodes.has(name)) { - const file = { - type: "blob", - fullpath: name, - basename: basename(name), - metadata, - // This recursively generates any missing parent folders. - parent: mkdir(dirname(name)), - children: [] - }; - if (file.parent) - file.parent.children.push(file); - inodes.set(name, file); - } - return inodes.get(name); - }; - mkdir("."); - for (const file of files) { - mkfile(file.path, file); - } - return inodes; -} -function mode2type(mode) { - switch (mode) { - case 16384: - return "tree"; - case 33188: - return "blob"; - case 33261: - return "blob"; - case 40960: - return "blob"; - case 57344: - return "commit"; - } - throw new InternalError(`Unexpected GitTree entry mode: ${mode.toString(8)}`); -} -var GitWalkerIndex = class { - constructor({ fs, gitdir, cache }) { - this.treePromise = GitIndexManager.acquire( - { fs, gitdir, cache }, - async function(index2) { - return flatFileListToDirectoryStructure(index2.entries); - } - ); - const walker = this; - this.ConstructEntry = class StageEntry { - constructor(fullpath) { - this._fullpath = fullpath; - this._type = false; - this._mode = false; - this._stat = false; - this._oid = false; - } - async type() { - return walker.type(this); - } - async mode() { - return walker.mode(this); - } - async stat() { - return walker.stat(this); - } - async content() { - return walker.content(this); - } - async oid() { - return walker.oid(this); - } - }; - } - async readdir(entry) { - const filepath = entry._fullpath; - const tree = await this.treePromise; - const inode = tree.get(filepath); - if (!inode) - return null; - if (inode.type === "blob") - return null; - if (inode.type !== "tree") { - throw new Error(`ENOTDIR: not a directory, scandir '${filepath}'`); - } - const names = inode.children.map((inode2) => inode2.fullpath); - names.sort(compareStrings); - return names; - } - async type(entry) { - if (entry._type === false) { - await entry.stat(); - } - return entry._type; - } - async mode(entry) { - if (entry._mode === false) { - await entry.stat(); - } - return entry._mode; - } - async stat(entry) { - if (entry._stat === false) { - const tree = await this.treePromise; - const inode = tree.get(entry._fullpath); - if (!inode) { - throw new Error( - `ENOENT: no such file or directory, lstat '${entry._fullpath}'` - ); - } - const stats = inode.type === "tree" ? {} : normalizeStats(inode.metadata); - entry._type = inode.type === "tree" ? "tree" : mode2type(stats.mode); - entry._mode = stats.mode; - if (inode.type === "tree") { - entry._stat = void 0; - } else { - entry._stat = stats; - } - } - return entry._stat; - } - async content(_entry) { - } - async oid(entry) { - if (entry._oid === false) { - const tree = await this.treePromise; - const inode = tree.get(entry._fullpath); - entry._oid = inode.metadata.oid; - } - return entry._oid; - } -}; -var GitWalkSymbol = Symbol("GitWalkSymbol"); -function STAGE() { - const o = /* @__PURE__ */ Object.create(null); - Object.defineProperty(o, GitWalkSymbol, { - value: function({ fs, gitdir, cache }) { - return new GitWalkerIndex({ fs, gitdir, cache }); - } - }); - Object.freeze(o); - return o; -} -var NotFoundError = class _NotFoundError extends BaseError { - /** - * @param {string} what - */ - constructor(what) { - super(`Could not find ${what}.`); - this.code = this.name = _NotFoundError.code; - this.data = { what }; - } -}; -NotFoundError.code = "NotFoundError"; -var ObjectTypeError = class _ObjectTypeError extends BaseError { - /** - * @param {string} oid - * @param {'blob'|'commit'|'tag'|'tree'} actual - * @param {'blob'|'commit'|'tag'|'tree'} expected - * @param {string} [filepath] - */ - constructor(oid, actual, expected, filepath) { - super( - `Object ${oid} ${filepath ? `at ${filepath}` : ""}was anticipated to be a ${expected} but it is a ${actual}.` - ); - this.code = this.name = _ObjectTypeError.code; - this.data = { oid, actual, expected, filepath }; - } -}; -ObjectTypeError.code = "ObjectTypeError"; -var InvalidOidError = class _InvalidOidError extends BaseError { - /** - * @param {string} value - */ - constructor(value) { - super(`Expected a 40-char hex object id but saw "${value}".`); - this.code = this.name = _InvalidOidError.code; - this.data = { value }; - } -}; -InvalidOidError.code = "InvalidOidError"; -var NoRefspecError = class _NoRefspecError extends BaseError { - /** - * @param {string} remote - */ - constructor(remote) { - super(`Could not find a fetch refspec for remote "${remote}". Make sure the config file has an entry like the following: -[remote "${remote}"] - fetch = +refs/heads/*:refs/remotes/origin/* -`); - this.code = this.name = _NoRefspecError.code; - this.data = { remote }; - } -}; -NoRefspecError.code = "NoRefspecError"; -var GitPackedRefs = class _GitPackedRefs { - constructor(text2) { - this.refs = /* @__PURE__ */ new Map(); - this.parsedConfig = []; - if (text2) { - let key2 = null; - this.parsedConfig = text2.trim().split("\n").map((line) => { - if (/^\s*#/.test(line)) { - return { line, comment: true }; - } - const i = line.indexOf(" "); - if (line.startsWith("^")) { - const value = line.slice(1); - this.refs.set(key2 + "^{}", value); - return { line, ref: key2, peeled: value }; - } else { - const value = line.slice(0, i); - key2 = line.slice(i + 1); - this.refs.set(key2, value); - return { line, ref: key2, oid: value }; - } - }); - } - return this; - } - static from(text2) { - return new _GitPackedRefs(text2); - } - delete(ref) { - this.parsedConfig = this.parsedConfig.filter((entry) => entry.ref !== ref); - this.refs.delete(ref); - } - toString() { - return this.parsedConfig.map(({ line }) => line).join("\n") + "\n"; - } -}; -var GitRefSpec = class _GitRefSpec { - constructor({ remotePath, localPath, force, matchPrefix }) { - Object.assign(this, { - remotePath, - localPath, - force, - matchPrefix - }); - } - static from(refspec) { - const [ - forceMatch, - remotePath, - remoteGlobMatch, - localPath, - localGlobMatch - ] = refspec.match(/^(\+?)(.*?)(\*?):(.*?)(\*?)$/).slice(1); - const force = forceMatch === "+"; - const remoteIsGlob = remoteGlobMatch === "*"; - const localIsGlob = localGlobMatch === "*"; - if (remoteIsGlob !== localIsGlob) { - throw new InternalError("Invalid refspec"); - } - return new _GitRefSpec({ - remotePath, - localPath, - force, - matchPrefix: remoteIsGlob - }); - } - translate(remoteBranch) { - if (this.matchPrefix) { - if (remoteBranch.startsWith(this.remotePath)) { - return this.localPath + remoteBranch.replace(this.remotePath, ""); - } - } else { - if (remoteBranch === this.remotePath) - return this.localPath; - } - return null; - } - reverseTranslate(localBranch) { - if (this.matchPrefix) { - if (localBranch.startsWith(this.localPath)) { - return this.remotePath + localBranch.replace(this.localPath, ""); - } - } else { - if (localBranch === this.localPath) - return this.remotePath; - } - return null; - } -}; -var GitRefSpecSet = class _GitRefSpecSet { - constructor(rules = []) { - this.rules = rules; - } - static from(refspecs) { - const rules = []; - for (const refspec of refspecs) { - rules.push(GitRefSpec.from(refspec)); - } - return new _GitRefSpecSet(rules); - } - add(refspec) { - const rule = GitRefSpec.from(refspec); - this.rules.push(rule); - } - translate(remoteRefs) { - const result = []; - for (const rule of this.rules) { - for (const remoteRef of remoteRefs) { - const localRef = rule.translate(remoteRef); - if (localRef) { - result.push([remoteRef, localRef]); - } - } - } - return result; - } - translateOne(remoteRef) { - let result = null; - for (const rule of this.rules) { - const localRef = rule.translate(remoteRef); - if (localRef) { - result = localRef; - } - } - return result; - } - localNamespaces() { - return this.rules.filter((rule) => rule.matchPrefix).map((rule) => rule.localPath.replace(/\/$/, "")); - } -}; -function compareRefNames(a, b) { - const _a2 = a.replace(/\^\{\}$/, ""); - const _b = b.replace(/\^\{\}$/, ""); - const tmp = -(_a2 < _b) || +(_a2 > _b); - if (tmp === 0) { - return a.endsWith("^{}") ? 1 : -1; - } - return tmp; -} -var memo = /* @__PURE__ */ new Map(); -function normalizePath(path2) { - let normalizedPath = memo.get(path2); - if (!normalizedPath) { - normalizedPath = normalizePathInternal(path2); - memo.set(path2, normalizedPath); - } - return normalizedPath; -} -function normalizePathInternal(path2) { - path2 = path2.split("/./").join("/").replace(/\/{2,}/g, "/"); - if (path2 === "/.") - return "/"; - if (path2 === "./") - return "."; - if (path2.startsWith("./")) - path2 = path2.slice(2); - if (path2.endsWith("/.")) - path2 = path2.slice(0, -2); - if (path2.length > 1 && path2.endsWith("/")) - path2 = path2.slice(0, -1); - if (path2 === "") - return "."; - return path2; -} -function join(...parts) { - return normalizePath(parts.map(normalizePath).join("/")); -} -var num = (val) => { - val = val.toLowerCase(); - let n = parseInt(val); - if (val.endsWith("k")) - n *= 1024; - if (val.endsWith("m")) - n *= 1024 * 1024; - if (val.endsWith("g")) - n *= 1024 * 1024 * 1024; - return n; -}; -var bool = (val) => { - val = val.trim().toLowerCase(); - if (val === "true" || val === "yes" || val === "on") - return true; - if (val === "false" || val === "no" || val === "off") - return false; - throw Error( - `Expected 'true', 'false', 'yes', 'no', 'on', or 'off', but got ${val}` - ); -}; -var schema = { - core: { - filemode: bool, - bare: bool, - logallrefupdates: bool, - symlinks: bool, - ignorecase: bool, - bigFileThreshold: num - } -}; -var SECTION_LINE_REGEX = /^\[([A-Za-z0-9-.]+)(?: "(.*)")?\]$/; -var SECTION_REGEX = /^[A-Za-z0-9-.]+$/; -var VARIABLE_LINE_REGEX = /^([A-Za-z][A-Za-z-]*)(?: *= *(.*))?$/; -var VARIABLE_NAME_REGEX = /^[A-Za-z][A-Za-z-]*$/; -var VARIABLE_VALUE_COMMENT_REGEX = /^(.*?)( *[#;].*)$/; -var extractSectionLine = (line) => { - const matches = SECTION_LINE_REGEX.exec(line); - if (matches != null) { - const [section, subsection] = matches.slice(1); - return [section, subsection]; - } - return null; -}; -var extractVariableLine = (line) => { - const matches = VARIABLE_LINE_REGEX.exec(line); - if (matches != null) { - const [name, rawValue = "true"] = matches.slice(1); - const valueWithoutComments = removeComments(rawValue); - const valueWithoutQuotes = removeQuotes(valueWithoutComments); - return [name, valueWithoutQuotes]; - } - return null; -}; -var removeComments = (rawValue) => { - const commentMatches = VARIABLE_VALUE_COMMENT_REGEX.exec(rawValue); - if (commentMatches == null) { - return rawValue; - } - const [valueWithoutComment, comment] = commentMatches.slice(1); - if (hasOddNumberOfQuotes(valueWithoutComment) && hasOddNumberOfQuotes(comment)) { - return `${valueWithoutComment}${comment}`; - } - return valueWithoutComment; -}; -var hasOddNumberOfQuotes = (text2) => { - const numberOfQuotes = (text2.match(/(?:^|[^\\])"/g) || []).length; - return numberOfQuotes % 2 !== 0; -}; -var removeQuotes = (text2) => { - return text2.split("").reduce((newText, c, idx, text3) => { - const isQuote = c === '"' && text3[idx - 1] !== "\\"; - const isEscapeForQuote = c === "\\" && text3[idx + 1] === '"'; - if (isQuote || isEscapeForQuote) { - return newText; - } - return newText + c; - }, ""); -}; -var lower = (text2) => { - return text2 != null ? text2.toLowerCase() : null; -}; -var getPath = (section, subsection, name) => { - return [lower(section), subsection, lower(name)].filter((a) => a != null).join("."); -}; -var normalizePath$1 = (path2) => { - const pathSegments = path2.split("."); - const section = pathSegments.shift(); - const name = pathSegments.pop(); - const subsection = pathSegments.length ? pathSegments.join(".") : void 0; - return { - section, - subsection, - name, - path: getPath(section, subsection, name), - sectionPath: getPath(section, subsection, null) - }; -}; -var findLastIndex = (array, callback) => { - return array.reduce((lastIndex, item, index2) => { - return callback(item) ? index2 : lastIndex; - }, -1); -}; -var GitConfig = class _GitConfig { - constructor(text2) { - let section = null; - let subsection = null; - this.parsedConfig = text2.split("\n").map((line) => { - let name = null; - let value = null; - const trimmedLine = line.trim(); - const extractedSection = extractSectionLine(trimmedLine); - const isSection = extractedSection != null; - if (isSection) { - ; - [section, subsection] = extractedSection; - } else { - const extractedVariable = extractVariableLine(trimmedLine); - const isVariable = extractedVariable != null; - if (isVariable) { - ; - [name, value] = extractedVariable; - } - } - const path2 = getPath(section, subsection, name); - return { line, isSection, section, subsection, name, value, path: path2 }; - }); - } - static from(text2) { - return new _GitConfig(text2); - } - async get(path2, getall = false) { - const normalizedPath = normalizePath$1(path2).path; - const allValues = this.parsedConfig.filter((config) => config.path === normalizedPath).map(({ section, name, value }) => { - const fn = schema[section] && schema[section][name]; - return fn ? fn(value) : value; - }); - return getall ? allValues : allValues.pop(); - } - async getall(path2) { - return this.get(path2, true); - } - async getSubsections(section) { - return this.parsedConfig.filter((config) => config.section === section && config.isSection).map((config) => config.subsection); - } - async deleteSection(section, subsection) { - this.parsedConfig = this.parsedConfig.filter( - (config) => !(config.section === section && config.subsection === subsection) - ); - } - async append(path2, value) { - return this.set(path2, value, true); - } - async set(path2, value, append3 = false) { - const { - section, - subsection, - name, - path: normalizedPath, - sectionPath - } = normalizePath$1(path2); - const configIndex = findLastIndex( - this.parsedConfig, - (config) => config.path === normalizedPath - ); - if (value == null) { - if (configIndex !== -1) { - this.parsedConfig.splice(configIndex, 1); - } - } else { - if (configIndex !== -1) { - const config = this.parsedConfig[configIndex]; - const modifiedConfig = Object.assign({}, config, { - name, - value, - modified: true - }); - if (append3) { - this.parsedConfig.splice(configIndex + 1, 0, modifiedConfig); - } else { - this.parsedConfig[configIndex] = modifiedConfig; - } - } else { - const sectionIndex = this.parsedConfig.findIndex( - (config) => config.path === sectionPath - ); - const newConfig = { - section, - subsection, - name, - value, - modified: true, - path: normalizedPath - }; - if (SECTION_REGEX.test(section) && VARIABLE_NAME_REGEX.test(name)) { - if (sectionIndex >= 0) { - this.parsedConfig.splice(sectionIndex + 1, 0, newConfig); - } else { - const newSection = { - section, - subsection, - modified: true, - path: sectionPath - }; - this.parsedConfig.push(newSection, newConfig); - } - } - } - } - } - toString() { - return this.parsedConfig.map(({ line, section, subsection, name, value, modified: modified2 = false }) => { - if (!modified2) { - return line; - } - if (name != null && value != null) { - if (typeof value === "string" && /[#;]/.test(value)) { - return ` ${name} = "${value}"`; - } - return ` ${name} = ${value}`; - } - if (subsection != null) { - return `[${section} "${subsection}"]`; - } - return `[${section}]`; - }).join("\n"); - } -}; -var GitConfigManager = class { - static async get({ fs, gitdir }) { - const text2 = await fs.read(`${gitdir}/config`, { encoding: "utf8" }); - return GitConfig.from(text2); - } - static async save({ fs, gitdir, config }) { - await fs.write(`${gitdir}/config`, config.toString(), { - encoding: "utf8" - }); - } -}; -var refpaths = (ref) => [ - `${ref}`, - `refs/${ref}`, - `refs/tags/${ref}`, - `refs/heads/${ref}`, - `refs/remotes/${ref}`, - `refs/remotes/${ref}/HEAD` -]; -var GIT_FILES = ["config", "description", "index", "shallow", "commondir"]; -var GitRefManager = class _GitRefManager { - static async updateRemoteRefs({ - fs, - gitdir, - remote, - refs, - symrefs, - tags, - refspecs = void 0, - prune = false, - pruneTags = false - }) { - for (const value of refs.values()) { - if (!value.match(/[0-9a-f]{40}/)) { - throw new InvalidOidError(value); - } - } - const config = await GitConfigManager.get({ fs, gitdir }); - if (!refspecs) { - refspecs = await config.getall(`remote.${remote}.fetch`); - if (refspecs.length === 0) { - throw new NoRefspecError(remote); - } - refspecs.unshift(`+HEAD:refs/remotes/${remote}/HEAD`); - } - const refspec = GitRefSpecSet.from(refspecs); - const actualRefsToWrite = /* @__PURE__ */ new Map(); - if (pruneTags) { - const tags2 = await _GitRefManager.listRefs({ - fs, - gitdir, - filepath: "refs/tags" - }); - await _GitRefManager.deleteRefs({ - fs, - gitdir, - refs: tags2.map((tag2) => `refs/tags/${tag2}`) - }); - } - if (tags) { - for (const serverRef of refs.keys()) { - if (serverRef.startsWith("refs/tags") && !serverRef.endsWith("^{}")) { - if (!await _GitRefManager.exists({ fs, gitdir, ref: serverRef })) { - const oid = refs.get(serverRef); - actualRefsToWrite.set(serverRef, oid); - } - } - } - } - const refTranslations = refspec.translate([...refs.keys()]); - for (const [serverRef, translatedRef] of refTranslations) { - const value = refs.get(serverRef); - actualRefsToWrite.set(translatedRef, value); - } - const symrefTranslations = refspec.translate([...symrefs.keys()]); - for (const [serverRef, translatedRef] of symrefTranslations) { - const value = symrefs.get(serverRef); - const symtarget = refspec.translateOne(value); - if (symtarget) { - actualRefsToWrite.set(translatedRef, `ref: ${symtarget}`); - } - } - const pruned = []; - if (prune) { - for (const filepath of refspec.localNamespaces()) { - const refs2 = (await _GitRefManager.listRefs({ - fs, - gitdir, - filepath - })).map((file) => `${filepath}/${file}`); - for (const ref of refs2) { - if (!actualRefsToWrite.has(ref)) { - pruned.push(ref); - } - } - } - if (pruned.length > 0) { - await _GitRefManager.deleteRefs({ fs, gitdir, refs: pruned }); - } - } - for (const [key2, value] of actualRefsToWrite) { - await fs.write(join(gitdir, key2), `${value.trim()} -`, "utf8"); - } - return { pruned }; - } - // TODO: make this less crude? - static async writeRef({ fs, gitdir, ref, value }) { - if (!value.match(/[0-9a-f]{40}/)) { - throw new InvalidOidError(value); - } - await fs.write(join(gitdir, ref), `${value.trim()} -`, "utf8"); - } - static async writeSymbolicRef({ fs, gitdir, ref, value }) { - await fs.write(join(gitdir, ref), `ref: ${value.trim()} -`, "utf8"); - } - static async deleteRef({ fs, gitdir, ref }) { - return _GitRefManager.deleteRefs({ fs, gitdir, refs: [ref] }); - } - static async deleteRefs({ fs, gitdir, refs }) { - await Promise.all(refs.map((ref) => fs.rm(join(gitdir, ref)))); - let text2 = await fs.read(`${gitdir}/packed-refs`, { encoding: "utf8" }); - const packed = GitPackedRefs.from(text2); - const beforeSize = packed.refs.size; - for (const ref of refs) { - if (packed.refs.has(ref)) { - packed.delete(ref); - } - } - if (packed.refs.size < beforeSize) { - text2 = packed.toString(); - await fs.write(`${gitdir}/packed-refs`, text2, { encoding: "utf8" }); - } - } - /** - * @param {object} args - * @param {import('../models/FileSystem.js').FileSystem} args.fs - * @param {string} args.gitdir - * @param {string} args.ref - * @param {number} [args.depth] - * @returns {Promise} - */ - static async resolve({ fs, gitdir, ref, depth = void 0 }) { - if (depth !== void 0) { - depth--; - if (depth === -1) { - return ref; - } - } - let sha; - if (ref.startsWith("ref: ")) { - ref = ref.slice("ref: ".length); - return _GitRefManager.resolve({ fs, gitdir, ref, depth }); - } - if (ref.length === 40 && /[0-9a-f]{40}/.test(ref)) { - return ref; - } - const packedMap = await _GitRefManager.packedRefs({ fs, gitdir }); - const allpaths = refpaths(ref).filter((p) => !GIT_FILES.includes(p)); - for (const ref2 of allpaths) { - sha = await fs.read(`${gitdir}/${ref2}`, { encoding: "utf8" }) || packedMap.get(ref2); - if (sha) { - return _GitRefManager.resolve({ fs, gitdir, ref: sha.trim(), depth }); - } - } - throw new NotFoundError(ref); - } - static async exists({ fs, gitdir, ref }) { - try { - await _GitRefManager.expand({ fs, gitdir, ref }); - return true; - } catch (err) { - return false; - } - } - static async expand({ fs, gitdir, ref }) { - if (ref.length === 40 && /[0-9a-f]{40}/.test(ref)) { - return ref; - } - const packedMap = await _GitRefManager.packedRefs({ fs, gitdir }); - const allpaths = refpaths(ref); - for (const ref2 of allpaths) { - if (await fs.exists(`${gitdir}/${ref2}`)) - return ref2; - if (packedMap.has(ref2)) - return ref2; - } - throw new NotFoundError(ref); - } - static async expandAgainstMap({ ref, map }) { - const allpaths = refpaths(ref); - for (const ref2 of allpaths) { - if (await map.has(ref2)) - return ref2; - } - throw new NotFoundError(ref); - } - static resolveAgainstMap({ ref, fullref = ref, depth = void 0, map }) { - if (depth !== void 0) { - depth--; - if (depth === -1) { - return { fullref, oid: ref }; - } - } - if (ref.startsWith("ref: ")) { - ref = ref.slice("ref: ".length); - return _GitRefManager.resolveAgainstMap({ ref, fullref, depth, map }); - } - if (ref.length === 40 && /[0-9a-f]{40}/.test(ref)) { - return { fullref, oid: ref }; - } - const allpaths = refpaths(ref); - for (const ref2 of allpaths) { - const sha = map.get(ref2); - if (sha) { - return _GitRefManager.resolveAgainstMap({ - ref: sha.trim(), - fullref: ref2, - depth, - map - }); - } - } - throw new NotFoundError(ref); - } - static async packedRefs({ fs, gitdir }) { - const text2 = await fs.read(`${gitdir}/packed-refs`, { encoding: "utf8" }); - const packed = GitPackedRefs.from(text2); - return packed.refs; - } - // List all the refs that match the `filepath` prefix - static async listRefs({ fs, gitdir, filepath }) { - const packedMap = _GitRefManager.packedRefs({ fs, gitdir }); - let files = null; - try { - files = await fs.readdirDeep(`${gitdir}/${filepath}`); - files = files.map((x) => x.replace(`${gitdir}/${filepath}/`, "")); - } catch (err) { - files = []; - } - for (let key2 of (await packedMap).keys()) { - if (key2.startsWith(filepath)) { - key2 = key2.replace(filepath + "/", ""); - if (!files.includes(key2)) { - files.push(key2); - } - } - } - files.sort(compareRefNames); - return files; - } - static async listBranches({ fs, gitdir, remote }) { - if (remote) { - return _GitRefManager.listRefs({ - fs, - gitdir, - filepath: `refs/remotes/${remote}` - }); - } else { - return _GitRefManager.listRefs({ fs, gitdir, filepath: `refs/heads` }); - } - } - static async listTags({ fs, gitdir }) { - const tags = await _GitRefManager.listRefs({ - fs, - gitdir, - filepath: `refs/tags` - }); - return tags.filter((x) => !x.endsWith("^{}")); - } -}; -function compareTreeEntryPath(a, b) { - return compareStrings(appendSlashIfDir(a), appendSlashIfDir(b)); -} -function appendSlashIfDir(entry) { - return entry.mode === "040000" ? entry.path + "/" : entry.path; -} -function mode2type$1(mode) { - switch (mode) { - case "040000": - return "tree"; - case "100644": - return "blob"; - case "100755": - return "blob"; - case "120000": - return "blob"; - case "160000": - return "commit"; - } - throw new InternalError(`Unexpected GitTree entry mode: ${mode}`); -} -function parseBuffer(buffer2) { - const _entries = []; - let cursor = 0; - while (cursor < buffer2.length) { - const space2 = buffer2.indexOf(32, cursor); - if (space2 === -1) { - throw new InternalError( - `GitTree: Error parsing buffer at byte location ${cursor}: Could not find the next space character.` - ); - } - const nullchar = buffer2.indexOf(0, cursor); - if (nullchar === -1) { - throw new InternalError( - `GitTree: Error parsing buffer at byte location ${cursor}: Could not find the next null character.` - ); - } - let mode = buffer2.slice(cursor, space2).toString("utf8"); - if (mode === "40000") - mode = "040000"; - const type = mode2type$1(mode); - const path2 = buffer2.slice(space2 + 1, nullchar).toString("utf8"); - if (path2.includes("\\") || path2.includes("/")) { - throw new UnsafeFilepathError(path2); - } - const oid = buffer2.slice(nullchar + 1, nullchar + 21).toString("hex"); - cursor = nullchar + 21; - _entries.push({ mode, path: path2, oid, type }); - } - return _entries; -} -function limitModeToAllowed(mode) { - if (typeof mode === "number") { - mode = mode.toString(8); - } - if (mode.match(/^0?4.*/)) - return "040000"; - if (mode.match(/^1006.*/)) - return "100644"; - if (mode.match(/^1007.*/)) - return "100755"; - if (mode.match(/^120.*/)) - return "120000"; - if (mode.match(/^160.*/)) - return "160000"; - throw new InternalError(`Could not understand file mode: ${mode}`); -} -function nudgeIntoShape(entry) { - if (!entry.oid && entry.sha) { - entry.oid = entry.sha; - } - entry.mode = limitModeToAllowed(entry.mode); - if (!entry.type) { - entry.type = mode2type$1(entry.mode); - } - return entry; -} -var GitTree = class _GitTree { - constructor(entries) { - if (Buffer.isBuffer(entries)) { - this._entries = parseBuffer(entries); - } else if (Array.isArray(entries)) { - this._entries = entries.map(nudgeIntoShape); - } else { - throw new InternalError("invalid type passed to GitTree constructor"); - } - this._entries.sort(comparePath); - } - static from(tree) { - return new _GitTree(tree); - } - render() { - return this._entries.map((entry) => `${entry.mode} ${entry.type} ${entry.oid} ${entry.path}`).join("\n"); - } - toObject() { - const entries = [...this._entries]; - entries.sort(compareTreeEntryPath); - return Buffer.concat( - entries.map((entry) => { - const mode = Buffer.from(entry.mode.replace(/^0/, "")); - const space2 = Buffer.from(" "); - const path2 = Buffer.from(entry.path, "utf8"); - const nullchar = Buffer.from([0]); - const oid = Buffer.from(entry.oid, "hex"); - return Buffer.concat([mode, space2, path2, nullchar, oid]); - }) - ); - } - /** - * @returns {TreeEntry[]} - */ - entries() { - return this._entries; - } - *[Symbol.iterator]() { - for (const entry of this._entries) { - yield entry; - } - } -}; -var GitObject = class { - static wrap({ type, object }) { - return Buffer.concat([ - Buffer.from(`${type} ${object.byteLength.toString()}\0`), - Buffer.from(object) - ]); - } - static unwrap(buffer2) { - const s = buffer2.indexOf(32); - const i = buffer2.indexOf(0); - const type = buffer2.slice(0, s).toString("utf8"); - const length = buffer2.slice(s + 1, i).toString("utf8"); - const actualLength = buffer2.length - (i + 1); - if (parseInt(length) !== actualLength) { - throw new InternalError( - `Length mismatch: expected ${length} bytes but got ${actualLength} instead.` - ); - } - return { - type, - object: Buffer.from(buffer2.slice(i + 1)) - }; - } -}; -async function readObjectLoose({ fs, gitdir, oid }) { - const source = `objects/${oid.slice(0, 2)}/${oid.slice(2)}`; - const file = await fs.read(`${gitdir}/${source}`); - if (!file) { - return null; - } - return { object: file, format: "deflated", source }; -} -function applyDelta(delta, source) { - const reader = new BufferCursor(delta); - const sourceSize = readVarIntLE(reader); - if (sourceSize !== source.byteLength) { - throw new InternalError( - `applyDelta expected source buffer to be ${sourceSize} bytes but the provided buffer was ${source.length} bytes` - ); - } - const targetSize = readVarIntLE(reader); - let target; - const firstOp = readOp(reader, source); - if (firstOp.byteLength === targetSize) { - target = firstOp; - } else { - target = Buffer.alloc(targetSize); - const writer = new BufferCursor(target); - writer.copy(firstOp); - while (!reader.eof()) { - writer.copy(readOp(reader, source)); - } - const tell = writer.tell(); - if (targetSize !== tell) { - throw new InternalError( - `applyDelta expected target buffer to be ${targetSize} bytes but the resulting buffer was ${tell} bytes` - ); - } - } - return target; -} -function readVarIntLE(reader) { - let result = 0; - let shift = 0; - let byte = null; - do { - byte = reader.readUInt8(); - result |= (byte & 127) << shift; - shift += 7; - } while (byte & 128); - return result; -} -function readCompactLE(reader, flags, size) { - let result = 0; - let shift = 0; - while (size--) { - if (flags & 1) { - result |= reader.readUInt8() << shift; - } - flags >>= 1; - shift += 8; - } - return result; -} -function readOp(reader, source) { - const byte = reader.readUInt8(); - const COPY = 128; - const OFFS = 15; - const SIZE = 112; - if (byte & COPY) { - const offset = readCompactLE(reader, byte & OFFS, 4); - let size = readCompactLE(reader, (byte & SIZE) >> 4, 3); - if (size === 0) - size = 65536; - return source.slice(offset, offset + size); - } else { - return reader.slice(byte); - } -} -function fromValue(value) { - let queue = [value]; - return { - next() { - return Promise.resolve({ done: queue.length === 0, value: queue.pop() }); - }, - return() { - queue = []; - return {}; - }, - [Symbol.asyncIterator]() { - return this; - } - }; -} -function getIterator(iterable) { - if (iterable[Symbol.asyncIterator]) { - return iterable[Symbol.asyncIterator](); - } - if (iterable[Symbol.iterator]) { - return iterable[Symbol.iterator](); - } - if (iterable.next) { - return iterable; - } - return fromValue(iterable); -} -var StreamReader = class { - constructor(stream) { - this.stream = getIterator(stream); - this.buffer = null; - this.cursor = 0; - this.undoCursor = 0; - this.started = false; - this._ended = false; - this._discardedBytes = 0; - } - eof() { - return this._ended && this.cursor === this.buffer.length; - } - tell() { - return this._discardedBytes + this.cursor; - } - async byte() { - if (this.eof()) - return; - if (!this.started) - await this._init(); - if (this.cursor === this.buffer.length) { - await this._loadnext(); - if (this._ended) - return; - } - this._moveCursor(1); - return this.buffer[this.undoCursor]; - } - async chunk() { - if (this.eof()) - return; - if (!this.started) - await this._init(); - if (this.cursor === this.buffer.length) { - await this._loadnext(); - if (this._ended) - return; - } - this._moveCursor(this.buffer.length); - return this.buffer.slice(this.undoCursor, this.cursor); - } - async read(n) { - if (this.eof()) - return; - if (!this.started) - await this._init(); - if (this.cursor + n > this.buffer.length) { - this._trim(); - await this._accumulate(n); - } - this._moveCursor(n); - return this.buffer.slice(this.undoCursor, this.cursor); - } - async skip(n) { - if (this.eof()) - return; - if (!this.started) - await this._init(); - if (this.cursor + n > this.buffer.length) { - this._trim(); - await this._accumulate(n); - } - this._moveCursor(n); - } - async undo() { - this.cursor = this.undoCursor; - } - async _next() { - this.started = true; - let { done, value } = await this.stream.next(); - if (done) { - this._ended = true; - if (!value) - return Buffer.alloc(0); - } - if (value) { - value = Buffer.from(value); - } - return value; - } - _trim() { - this.buffer = this.buffer.slice(this.undoCursor); - this.cursor -= this.undoCursor; - this._discardedBytes += this.undoCursor; - this.undoCursor = 0; - } - _moveCursor(n) { - this.undoCursor = this.cursor; - this.cursor += n; - if (this.cursor > this.buffer.length) { - this.cursor = this.buffer.length; - } - } - async _accumulate(n) { - if (this._ended) - return; - const buffers = [this.buffer]; - while (this.cursor + n > lengthBuffers(buffers)) { - const nextbuffer = await this._next(); - if (this._ended) - break; - buffers.push(nextbuffer); - } - this.buffer = Buffer.concat(buffers); - } - async _loadnext() { - this._discardedBytes += this.buffer.length; - this.undoCursor = 0; - this.cursor = 0; - this.buffer = await this._next(); - } - async _init() { - this.buffer = await this._next(); - } -}; -function lengthBuffers(buffers) { - return buffers.reduce((acc, buffer2) => acc + buffer2.length, 0); -} -async function listpack(stream, onData) { - const reader = new StreamReader(stream); - let PACK = await reader.read(4); - PACK = PACK.toString("utf8"); - if (PACK !== "PACK") { - throw new InternalError(`Invalid PACK header '${PACK}'`); - } - let version2 = await reader.read(4); - version2 = version2.readUInt32BE(0); - if (version2 !== 2) { - throw new InternalError(`Invalid packfile version: ${version2}`); - } - let numObjects = await reader.read(4); - numObjects = numObjects.readUInt32BE(0); - if (numObjects < 1) - return; - while (!reader.eof() && numObjects--) { - const offset = reader.tell(); - const { type, length, ofs, reference } = await parseHeader(reader); - const inflator = new import_pako.default.Inflate(); - while (!inflator.result) { - const chunk = await reader.chunk(); - if (!chunk) - break; - inflator.push(chunk, false); - if (inflator.err) { - throw new InternalError(`Pako error: ${inflator.msg}`); - } - if (inflator.result) { - if (inflator.result.length !== length) { - throw new InternalError( - `Inflated object size is different from that stated in packfile.` - ); - } - await reader.undo(); - await reader.read(chunk.length - inflator.strm.avail_in); - const end = reader.tell(); - await onData({ - data: inflator.result, - type, - num: numObjects, - offset, - end, - reference, - ofs - }); - } - } - } -} -async function parseHeader(reader) { - let byte = await reader.byte(); - const type = byte >> 4 & 7; - let length = byte & 15; - if (byte & 128) { - let shift = 4; - do { - byte = await reader.byte(); - length |= (byte & 127) << shift; - shift += 7; - } while (byte & 128); - } - let ofs; - let reference; - if (type === 6) { - let shift = 0; - ofs = 0; - const bytes = []; - do { - byte = await reader.byte(); - ofs |= (byte & 127) << shift; - shift += 7; - bytes.push(byte); - } while (byte & 128); - reference = Buffer.from(bytes); - } - if (type === 7) { - const buf = await reader.read(20); - reference = buf; - } - return { type, length, ofs, reference }; -} -var supportsDecompressionStream = false; -async function inflate(buffer2) { - if (supportsDecompressionStream === null) { - supportsDecompressionStream = testDecompressionStream(); - } - return supportsDecompressionStream ? browserInflate(buffer2) : import_pako.default.inflate(buffer2); -} -async function browserInflate(buffer2) { - const ds = new DecompressionStream("deflate"); - const d = new Blob([buffer2]).stream().pipeThrough(ds); - return new Uint8Array(await new Response(d).arrayBuffer()); -} -function testDecompressionStream() { - try { - const ds = new DecompressionStream("deflate"); - if (ds) - return true; - } catch (_) { - } - return false; -} -function decodeVarInt(reader) { - const bytes = []; - let byte = 0; - let multibyte = 0; - do { - byte = reader.readUInt8(); - const lastSeven = byte & 127; - bytes.push(lastSeven); - multibyte = byte & 128; - } while (multibyte); - return bytes.reduce((a, b) => a + 1 << 7 | b, -1); -} -function otherVarIntDecode(reader, startWith) { - let result = startWith; - let shift = 4; - let byte = null; - do { - byte = reader.readUInt8(); - result |= (byte & 127) << shift; - shift += 7; - } while (byte & 128); - return result; -} -var GitPackIndex = class _GitPackIndex { - constructor(stuff) { - Object.assign(this, stuff); - this.offsetCache = {}; - } - static async fromIdx({ idx, getExternalRefDelta }) { - const reader = new BufferCursor(idx); - const magic = reader.slice(4).toString("hex"); - if (magic !== "ff744f63") { - return; - } - const version2 = reader.readUInt32BE(); - if (version2 !== 2) { - throw new InternalError( - `Unable to read version ${version2} packfile IDX. (Only version 2 supported)` - ); - } - if (idx.byteLength > 2048 * 1024 * 1024) { - throw new InternalError( - `To keep implementation simple, I haven't implemented the layer 5 feature needed to support packfiles > 2GB in size.` - ); - } - reader.seek(reader.tell() + 4 * 255); - const size = reader.readUInt32BE(); - const hashes = []; - for (let i = 0; i < size; i++) { - const hash2 = reader.slice(20).toString("hex"); - hashes[i] = hash2; - } - reader.seek(reader.tell() + 4 * size); - const offsets = /* @__PURE__ */ new Map(); - for (let i = 0; i < size; i++) { - offsets.set(hashes[i], reader.readUInt32BE()); - } - const packfileSha = reader.slice(20).toString("hex"); - return new _GitPackIndex({ - hashes, - crcs: {}, - offsets, - packfileSha, - getExternalRefDelta - }); - } - static async fromPack({ pack, getExternalRefDelta, onProgress }) { - const listpackTypes = { - 1: "commit", - 2: "tree", - 3: "blob", - 4: "tag", - 6: "ofs-delta", - 7: "ref-delta" - }; - const offsetToObject = {}; - const packfileSha = pack.slice(-20).toString("hex"); - const hashes = []; - const crcs = {}; - const offsets = /* @__PURE__ */ new Map(); - let totalObjectCount = null; - let lastPercent = null; - await listpack([pack], async ({ data, type, reference, offset, num: num2 }) => { - if (totalObjectCount === null) - totalObjectCount = num2; - const percent = Math.floor( - (totalObjectCount - num2) * 100 / totalObjectCount - ); - if (percent !== lastPercent) { - if (onProgress) { - await onProgress({ - phase: "Receiving objects", - loaded: totalObjectCount - num2, - total: totalObjectCount - }); - } - } - lastPercent = percent; - type = listpackTypes[type]; - if (["commit", "tree", "blob", "tag"].includes(type)) { - offsetToObject[offset] = { - type, - offset - }; - } else if (type === "ofs-delta") { - offsetToObject[offset] = { - type, - offset - }; - } else if (type === "ref-delta") { - offsetToObject[offset] = { - type, - offset - }; - } - }); - const offsetArray = Object.keys(offsetToObject).map(Number); - for (const [i, start] of offsetArray.entries()) { - const end = i + 1 === offsetArray.length ? pack.byteLength - 20 : offsetArray[i + 1]; - const o = offsetToObject[start]; - const crc = import_crc_32.default.buf(pack.slice(start, end)) >>> 0; - o.end = end; - o.crc = crc; - } - const p = new _GitPackIndex({ - pack: Promise.resolve(pack), - packfileSha, - crcs, - hashes, - offsets, - getExternalRefDelta - }); - lastPercent = null; - let count = 0; - const objectsByDepth = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; - for (let offset in offsetToObject) { - offset = Number(offset); - const percent = Math.floor(count * 100 / totalObjectCount); - if (percent !== lastPercent) { - if (onProgress) { - await onProgress({ - phase: "Resolving deltas", - loaded: count, - total: totalObjectCount - }); - } - } - count++; - lastPercent = percent; - const o = offsetToObject[offset]; - if (o.oid) - continue; - try { - p.readDepth = 0; - p.externalReadDepth = 0; - const { type, object } = await p.readSlice({ start: offset }); - objectsByDepth[p.readDepth] += 1; - const oid = await shasum(GitObject.wrap({ type, object })); - o.oid = oid; - hashes.push(oid); - offsets.set(oid, offset); - crcs[oid] = o.crc; - } catch (err) { - continue; - } - } - hashes.sort(); - return p; - } - async toBuffer() { - const buffers = []; - const write = (str, encoding) => { - buffers.push(Buffer.from(str, encoding)); - }; - write("ff744f63", "hex"); - write("00000002", "hex"); - const fanoutBuffer = new BufferCursor(Buffer.alloc(256 * 4)); - for (let i = 0; i < 256; i++) { - let count = 0; - for (const hash2 of this.hashes) { - if (parseInt(hash2.slice(0, 2), 16) <= i) - count++; - } - fanoutBuffer.writeUInt32BE(count); - } - buffers.push(fanoutBuffer.buffer); - for (const hash2 of this.hashes) { - write(hash2, "hex"); - } - const crcsBuffer = new BufferCursor(Buffer.alloc(this.hashes.length * 4)); - for (const hash2 of this.hashes) { - crcsBuffer.writeUInt32BE(this.crcs[hash2]); - } - buffers.push(crcsBuffer.buffer); - const offsetsBuffer = new BufferCursor(Buffer.alloc(this.hashes.length * 4)); - for (const hash2 of this.hashes) { - offsetsBuffer.writeUInt32BE(this.offsets.get(hash2)); - } - buffers.push(offsetsBuffer.buffer); - write(this.packfileSha, "hex"); - const totalBuffer = Buffer.concat(buffers); - const sha = await shasum(totalBuffer); - const shaBuffer = Buffer.alloc(20); - shaBuffer.write(sha, "hex"); - return Buffer.concat([totalBuffer, shaBuffer]); - } - async load({ pack }) { - this.pack = pack; - } - async unload() { - this.pack = null; - } - async read({ oid }) { - if (!this.offsets.get(oid)) { - if (this.getExternalRefDelta) { - this.externalReadDepth++; - return this.getExternalRefDelta(oid); - } else { - throw new InternalError(`Could not read object ${oid} from packfile`); - } - } - const start = this.offsets.get(oid); - return this.readSlice({ start }); - } - async readSlice({ start }) { - if (this.offsetCache[start]) { - return Object.assign({}, this.offsetCache[start]); - } - this.readDepth++; - const types2 = { - 16: "commit", - 32: "tree", - 48: "blob", - 64: "tag", - 96: "ofs_delta", - 112: "ref_delta" - }; - if (!this.pack) { - throw new InternalError( - "Tried to read from a GitPackIndex with no packfile loaded into memory" - ); - } - const raw = (await this.pack).slice(start); - const reader = new BufferCursor(raw); - const byte = reader.readUInt8(); - const btype = byte & 112; - let type = types2[btype]; - if (type === void 0) { - throw new InternalError("Unrecognized type: 0b" + btype.toString(2)); - } - const lastFour = byte & 15; - let length = lastFour; - const multibyte = byte & 128; - if (multibyte) { - length = otherVarIntDecode(reader, lastFour); - } - let base = null; - let object = null; - if (type === "ofs_delta") { - const offset = decodeVarInt(reader); - const baseOffset = start - offset; - ({ object: base, type } = await this.readSlice({ start: baseOffset })); - } - if (type === "ref_delta") { - const oid = reader.slice(20).toString("hex"); - ({ object: base, type } = await this.read({ oid })); - } - const buffer2 = raw.slice(reader.tell()); - object = Buffer.from(await inflate(buffer2)); - if (object.byteLength !== length) { - throw new InternalError( - `Packfile told us object would have length ${length} but it had length ${object.byteLength}` - ); - } - if (base) { - object = Buffer.from(applyDelta(object, base)); - } - if (this.readDepth > 3) { - this.offsetCache[start] = { type, object }; - } - return { type, format: "content", object }; - } -}; -var PackfileCache = Symbol("PackfileCache"); -async function loadPackIndex({ - fs, - filename, - getExternalRefDelta, - emitter, - emitterPrefix -}) { - const idx = await fs.read(filename); - return GitPackIndex.fromIdx({ idx, getExternalRefDelta }); -} -function readPackIndex({ - fs, - cache, - filename, - getExternalRefDelta, - emitter, - emitterPrefix -}) { - if (!cache[PackfileCache]) - cache[PackfileCache] = /* @__PURE__ */ new Map(); - let p = cache[PackfileCache].get(filename); - if (!p) { - p = loadPackIndex({ - fs, - filename, - getExternalRefDelta, - emitter, - emitterPrefix - }); - cache[PackfileCache].set(filename, p); - } - return p; -} -async function readObjectPacked({ - fs, - cache, - gitdir, - oid, - format = "content", - getExternalRefDelta -}) { - let list = await fs.readdir(join(gitdir, "objects/pack")); - list = list.filter((x) => x.endsWith(".idx")); - for (const filename of list) { - const indexFile = `${gitdir}/objects/pack/${filename}`; - const p = await readPackIndex({ - fs, - cache, - filename: indexFile, - getExternalRefDelta - }); - if (p.error) - throw new InternalError(p.error); - if (p.offsets.has(oid)) { - if (!p.pack) { - const packFile = indexFile.replace(/idx$/, "pack"); - p.pack = fs.read(packFile); - } - const result = await p.read({ oid, getExternalRefDelta }); - result.format = "content"; - result.source = `objects/pack/${filename.replace(/idx$/, "pack")}`; - return result; - } - } - return null; -} -async function _readObject({ - fs, - cache, - gitdir, - oid, - format = "content" -}) { - const getExternalRefDelta = (oid2) => _readObject({ fs, cache, gitdir, oid: oid2 }); - let result; - if (oid === "4b825dc642cb6eb9a060e54bf8d69288fbee4904") { - result = { format: "wrapped", object: Buffer.from(`tree 0\0`) }; - } - if (!result) { - result = await readObjectLoose({ fs, gitdir, oid }); - } - if (!result) { - result = await readObjectPacked({ - fs, - cache, - gitdir, - oid, - getExternalRefDelta - }); - } - if (!result) { - throw new NotFoundError(oid); - } - if (format === "deflated") { - return result; - } - if (result.format === "deflated") { - result.object = Buffer.from(await inflate(result.object)); - result.format = "wrapped"; - } - if (result.format === "wrapped") { - if (format === "wrapped" && result.format === "wrapped") { - return result; - } - const sha = await shasum(result.object); - if (sha !== oid) { - throw new InternalError( - `SHA check failed! Expected ${oid}, computed ${sha}` - ); - } - const { object, type } = GitObject.unwrap(result.object); - result.type = type; - result.object = object; - result.format = "content"; - } - if (result.format === "content") { - if (format === "content") - return result; - return; - } - throw new InternalError(`invalid format "${result.format}"`); -} -var AlreadyExistsError = class _AlreadyExistsError extends BaseError { - /** - * @param {'note'|'remote'|'tag'|'branch'} noun - * @param {string} where - * @param {boolean} canForce - */ - constructor(noun, where, canForce = true) { - super( - `Failed to create ${noun} at ${where} because it already exists.${canForce ? ` (Hint: use 'force: true' parameter to overwrite existing ${noun}.)` : ""}` - ); - this.code = this.name = _AlreadyExistsError.code; - this.data = { noun, where, canForce }; - } -}; -AlreadyExistsError.code = "AlreadyExistsError"; -var AmbiguousError = class _AmbiguousError extends BaseError { - /** - * @param {'oids'|'refs'} nouns - * @param {string} short - * @param {string[]} matches - */ - constructor(nouns, short, matches) { - super( - `Found multiple ${nouns} matching "${short}" (${matches.join( - ", " - )}). Use a longer abbreviation length to disambiguate them.` - ); - this.code = this.name = _AmbiguousError.code; - this.data = { nouns, short, matches }; - } -}; -AmbiguousError.code = "AmbiguousError"; -var CheckoutConflictError = class _CheckoutConflictError extends BaseError { - /** - * @param {string[]} filepaths - */ - constructor(filepaths) { - super( - `Your local changes to the following files would be overwritten by checkout: ${filepaths.join( - ", " - )}` - ); - this.code = this.name = _CheckoutConflictError.code; - this.data = { filepaths }; - } -}; -CheckoutConflictError.code = "CheckoutConflictError"; -var CommitNotFetchedError = class _CommitNotFetchedError extends BaseError { - /** - * @param {string} ref - * @param {string} oid - */ - constructor(ref, oid) { - super( - `Failed to checkout "${ref}" because commit ${oid} is not available locally. Do a git fetch to make the branch available locally.` - ); - this.code = this.name = _CommitNotFetchedError.code; - this.data = { ref, oid }; - } -}; -CommitNotFetchedError.code = "CommitNotFetchedError"; -var EmptyServerResponseError = class _EmptyServerResponseError extends BaseError { - constructor() { - super(`Empty response from git server.`); - this.code = this.name = _EmptyServerResponseError.code; - this.data = {}; - } -}; -EmptyServerResponseError.code = "EmptyServerResponseError"; -var FastForwardError = class _FastForwardError extends BaseError { - constructor() { - super(`A simple fast-forward merge was not possible.`); - this.code = this.name = _FastForwardError.code; - this.data = {}; - } -}; -FastForwardError.code = "FastForwardError"; -var GitPushError = class _GitPushError extends BaseError { - /** - * @param {string} prettyDetails - * @param {PushResult} result - */ - constructor(prettyDetails, result) { - super(`One or more branches were not updated: ${prettyDetails}`); - this.code = this.name = _GitPushError.code; - this.data = { prettyDetails, result }; - } -}; -GitPushError.code = "GitPushError"; -var HttpError = class _HttpError extends BaseError { - /** - * @param {number} statusCode - * @param {string} statusMessage - * @param {string} response - */ - constructor(statusCode, statusMessage, response) { - super(`HTTP Error: ${statusCode} ${statusMessage}`); - this.code = this.name = _HttpError.code; - this.data = { statusCode, statusMessage, response }; - } -}; -HttpError.code = "HttpError"; -var InvalidFilepathError = class _InvalidFilepathError extends BaseError { - /** - * @param {'leading-slash'|'trailing-slash'|'directory'} [reason] - */ - constructor(reason) { - let message = "invalid filepath"; - if (reason === "leading-slash" || reason === "trailing-slash") { - message = `"filepath" parameter should not include leading or trailing directory separators because these can cause problems on some platforms.`; - } else if (reason === "directory") { - message = `"filepath" should not be a directory.`; - } - super(message); - this.code = this.name = _InvalidFilepathError.code; - this.data = { reason }; - } -}; -InvalidFilepathError.code = "InvalidFilepathError"; -var InvalidRefNameError = class _InvalidRefNameError extends BaseError { - /** - * @param {string} ref - * @param {string} suggestion - * @param {boolean} canForce - */ - constructor(ref, suggestion) { - super( - `"${ref}" would be an invalid git reference. (Hint: a valid alternative would be "${suggestion}".)` - ); - this.code = this.name = _InvalidRefNameError.code; - this.data = { ref, suggestion }; - } -}; -InvalidRefNameError.code = "InvalidRefNameError"; -var MaxDepthError = class _MaxDepthError extends BaseError { - /** - * @param {number} depth - */ - constructor(depth) { - super(`Maximum search depth of ${depth} exceeded.`); - this.code = this.name = _MaxDepthError.code; - this.data = { depth }; - } -}; -MaxDepthError.code = "MaxDepthError"; -var MergeNotSupportedError = class _MergeNotSupportedError extends BaseError { - constructor() { - super(`Merges with conflicts are not supported yet.`); - this.code = this.name = _MergeNotSupportedError.code; - this.data = {}; - } -}; -MergeNotSupportedError.code = "MergeNotSupportedError"; -var MergeConflictError = class _MergeConflictError extends BaseError { - /** - * @param {Array} filepaths - * @param {Array} bothModified - * @param {Array} deleteByUs - * @param {Array} deleteByTheirs - */ - constructor(filepaths, bothModified, deleteByUs, deleteByTheirs) { - super( - `Automatic merge failed with one or more merge conflicts in the following files: ${filepaths.toString()}. Fix conflicts then commit the result.` - ); - this.code = this.name = _MergeConflictError.code; - this.data = { filepaths, bothModified, deleteByUs, deleteByTheirs }; - } -}; -MergeConflictError.code = "MergeConflictError"; -var MissingNameError = class _MissingNameError extends BaseError { - /** - * @param {'author'|'committer'|'tagger'} role - */ - constructor(role) { - super( - `No name was provided for ${role} in the argument or in the .git/config file.` - ); - this.code = this.name = _MissingNameError.code; - this.data = { role }; - } -}; -MissingNameError.code = "MissingNameError"; -var MissingParameterError = class _MissingParameterError extends BaseError { - /** - * @param {string} parameter - */ - constructor(parameter) { - super( - `The function requires a "${parameter}" parameter but none was provided.` - ); - this.code = this.name = _MissingParameterError.code; - this.data = { parameter }; - } -}; -MissingParameterError.code = "MissingParameterError"; -var MultipleGitError = class _MultipleGitError extends BaseError { - /** - * @param {Error[]} errors - * @param {string} message - */ - constructor(errors) { - super( - `There are multiple errors that were thrown by the method. Please refer to the "errors" property to see more` - ); - this.code = this.name = _MultipleGitError.code; - this.data = { errors }; - this.errors = errors; - } -}; -MultipleGitError.code = "MultipleGitError"; -var ParseError = class _ParseError extends BaseError { - /** - * @param {string} expected - * @param {string} actual - */ - constructor(expected, actual) { - super(`Expected "${expected}" but received "${actual}".`); - this.code = this.name = _ParseError.code; - this.data = { expected, actual }; - } -}; -ParseError.code = "ParseError"; -var PushRejectedError = class _PushRejectedError extends BaseError { - /** - * @param {'not-fast-forward'|'tag-exists'} reason - */ - constructor(reason) { - let message = ""; - if (reason === "not-fast-forward") { - message = " because it was not a simple fast-forward"; - } else if (reason === "tag-exists") { - message = " because tag already exists"; - } - super(`Push rejected${message}. Use "force: true" to override.`); - this.code = this.name = _PushRejectedError.code; - this.data = { reason }; - } -}; -PushRejectedError.code = "PushRejectedError"; -var RemoteCapabilityError = class _RemoteCapabilityError extends BaseError { - /** - * @param {'shallow'|'deepen-since'|'deepen-not'|'deepen-relative'} capability - * @param {'depth'|'since'|'exclude'|'relative'} parameter - */ - constructor(capability, parameter) { - super( - `Remote does not support the "${capability}" so the "${parameter}" parameter cannot be used.` - ); - this.code = this.name = _RemoteCapabilityError.code; - this.data = { capability, parameter }; - } -}; -RemoteCapabilityError.code = "RemoteCapabilityError"; -var SmartHttpError = class _SmartHttpError extends BaseError { - /** - * @param {string} preview - * @param {string} response - */ - constructor(preview, response) { - super( - `Remote did not reply using the "smart" HTTP protocol. Expected "001e# service=git-upload-pack" but received: ${preview}` - ); - this.code = this.name = _SmartHttpError.code; - this.data = { preview, response }; - } -}; -SmartHttpError.code = "SmartHttpError"; -var UnknownTransportError = class _UnknownTransportError extends BaseError { - /** - * @param {string} url - * @param {string} transport - * @param {string} [suggestion] - */ - constructor(url, transport, suggestion) { - super( - `Git remote "${url}" uses an unrecognized transport protocol: "${transport}"` - ); - this.code = this.name = _UnknownTransportError.code; - this.data = { url, transport, suggestion }; - } -}; -UnknownTransportError.code = "UnknownTransportError"; -var UrlParseError = class _UrlParseError extends BaseError { - /** - * @param {string} url - */ - constructor(url) { - super(`Cannot parse remote URL: "${url}"`); - this.code = this.name = _UrlParseError.code; - this.data = { url }; - } -}; -UrlParseError.code = "UrlParseError"; -var UserCanceledError = class _UserCanceledError extends BaseError { - constructor() { - super(`The operation was canceled.`); - this.code = this.name = _UserCanceledError.code; - this.data = {}; - } -}; -UserCanceledError.code = "UserCanceledError"; -var IndexResetError = class _IndexResetError extends BaseError { - /** - * @param {Array} filepaths - */ - constructor(filepath) { - super( - `Could not merge index: Entry for '${filepath}' is not up to date. Either reset the index entry to HEAD, or stage your unstaged chages.` - ); - this.code = this.name = _IndexResetError.code; - this.data = { filepath }; - } -}; -IndexResetError.code = "IndexResetError"; -var Errors = /* @__PURE__ */ Object.freeze({ - __proto__: null, - AlreadyExistsError, - AmbiguousError, - CheckoutConflictError, - CommitNotFetchedError, - EmptyServerResponseError, - FastForwardError, - GitPushError, - HttpError, - InternalError, - InvalidFilepathError, - InvalidOidError, - InvalidRefNameError, - MaxDepthError, - MergeNotSupportedError, - MergeConflictError, - MissingNameError, - MissingParameterError, - MultipleGitError, - NoRefspecError, - NotFoundError, - ObjectTypeError, - ParseError, - PushRejectedError, - RemoteCapabilityError, - SmartHttpError, - UnknownTransportError, - UnsafeFilepathError, - UrlParseError, - UserCanceledError, - UnmergedPathsError, - IndexResetError -}); -function formatAuthor({ name, email, timestamp, timezoneOffset }) { - timezoneOffset = formatTimezoneOffset(timezoneOffset); - return `${name} <${email}> ${timestamp} ${timezoneOffset}`; -} -function formatTimezoneOffset(minutes) { - const sign = simpleSign(negateExceptForZero(minutes)); - minutes = Math.abs(minutes); - const hours = Math.floor(minutes / 60); - minutes -= hours * 60; - let strHours = String(hours); - let strMinutes = String(minutes); - if (strHours.length < 2) - strHours = "0" + strHours; - if (strMinutes.length < 2) - strMinutes = "0" + strMinutes; - return (sign === -1 ? "-" : "+") + strHours + strMinutes; -} -function simpleSign(n) { - return Math.sign(n) || (Object.is(n, -0) ? -1 : 1); -} -function negateExceptForZero(n) { - return n === 0 ? n : -n; -} -function normalizeNewlines(str) { - str = str.replace(/\r/g, ""); - str = str.replace(/^\n+/, ""); - str = str.replace(/\n+$/, "") + "\n"; - return str; -} -function parseAuthor(author) { - const [, name, email, timestamp, offset] = author.match( - /^(.*) <(.*)> (.*) (.*)$/ - ); - return { - name, - email, - timestamp: Number(timestamp), - timezoneOffset: parseTimezoneOffset(offset) - }; -} -function parseTimezoneOffset(offset) { - let [, sign, hours, minutes] = offset.match(/(\+|-)(\d\d)(\d\d)/); - minutes = (sign === "+" ? 1 : -1) * (Number(hours) * 60 + Number(minutes)); - return negateExceptForZero$1(minutes); -} -function negateExceptForZero$1(n) { - return n === 0 ? n : -n; -} -var GitAnnotatedTag = class _GitAnnotatedTag { - constructor(tag2) { - if (typeof tag2 === "string") { - this._tag = tag2; - } else if (Buffer.isBuffer(tag2)) { - this._tag = tag2.toString("utf8"); - } else if (typeof tag2 === "object") { - this._tag = _GitAnnotatedTag.render(tag2); - } else { - throw new InternalError( - "invalid type passed to GitAnnotatedTag constructor" - ); - } - } - static from(tag2) { - return new _GitAnnotatedTag(tag2); - } - static render(obj) { - return `object ${obj.object} -type ${obj.type} -tag ${obj.tag} -tagger ${formatAuthor(obj.tagger)} - -${obj.message} -${obj.gpgsig ? obj.gpgsig : ""}`; - } - justHeaders() { - return this._tag.slice(0, this._tag.indexOf("\n\n")); - } - message() { - const tag2 = this.withoutSignature(); - return tag2.slice(tag2.indexOf("\n\n") + 2); - } - parse() { - return Object.assign(this.headers(), { - message: this.message(), - gpgsig: this.gpgsig() - }); - } - render() { - return this._tag; - } - headers() { - const headers = this.justHeaders().split("\n"); - const hs = []; - for (const h of headers) { - if (h[0] === " ") { - hs[hs.length - 1] += "\n" + h.slice(1); - } else { - hs.push(h); - } - } - const obj = {}; - for (const h of hs) { - const key2 = h.slice(0, h.indexOf(" ")); - const value = h.slice(h.indexOf(" ") + 1); - if (Array.isArray(obj[key2])) { - obj[key2].push(value); - } else { - obj[key2] = value; - } - } - if (obj.tagger) { - obj.tagger = parseAuthor(obj.tagger); - } - if (obj.committer) { - obj.committer = parseAuthor(obj.committer); - } - return obj; - } - withoutSignature() { - const tag2 = normalizeNewlines(this._tag); - if (tag2.indexOf("\n-----BEGIN PGP SIGNATURE-----") === -1) - return tag2; - return tag2.slice(0, tag2.lastIndexOf("\n-----BEGIN PGP SIGNATURE-----")); - } - gpgsig() { - if (this._tag.indexOf("\n-----BEGIN PGP SIGNATURE-----") === -1) - return; - const signature = this._tag.slice( - this._tag.indexOf("-----BEGIN PGP SIGNATURE-----"), - this._tag.indexOf("-----END PGP SIGNATURE-----") + "-----END PGP SIGNATURE-----".length - ); - return normalizeNewlines(signature); - } - payload() { - return this.withoutSignature() + "\n"; - } - toObject() { - return Buffer.from(this._tag, "utf8"); - } - static async sign(tag2, sign, secretKey) { - const payload = tag2.payload(); - let { signature } = await sign({ payload, secretKey }); - signature = normalizeNewlines(signature); - const signedTag = payload + signature; - return _GitAnnotatedTag.from(signedTag); - } -}; -function indent(str) { - return str.trim().split("\n").map((x) => " " + x).join("\n") + "\n"; -} -function outdent(str) { - return str.split("\n").map((x) => x.replace(/^ /, "")).join("\n"); -} -var GitCommit = class _GitCommit { - constructor(commit2) { - if (typeof commit2 === "string") { - this._commit = commit2; - } else if (Buffer.isBuffer(commit2)) { - this._commit = commit2.toString("utf8"); - } else if (typeof commit2 === "object") { - this._commit = _GitCommit.render(commit2); - } else { - throw new InternalError("invalid type passed to GitCommit constructor"); - } - } - static fromPayloadSignature({ payload, signature }) { - const headers = _GitCommit.justHeaders(payload); - const message = _GitCommit.justMessage(payload); - const commit2 = normalizeNewlines( - headers + "\ngpgsig" + indent(signature) + "\n" + message - ); - return new _GitCommit(commit2); - } - static from(commit2) { - return new _GitCommit(commit2); - } - toObject() { - return Buffer.from(this._commit, "utf8"); - } - // Todo: allow setting the headers and message - headers() { - return this.parseHeaders(); - } - // Todo: allow setting the headers and message - message() { - return _GitCommit.justMessage(this._commit); - } - parse() { - return Object.assign({ message: this.message() }, this.headers()); - } - static justMessage(commit2) { - return normalizeNewlines(commit2.slice(commit2.indexOf("\n\n") + 2)); - } - static justHeaders(commit2) { - return commit2.slice(0, commit2.indexOf("\n\n")); - } - parseHeaders() { - const headers = _GitCommit.justHeaders(this._commit).split("\n"); - const hs = []; - for (const h of headers) { - if (h[0] === " ") { - hs[hs.length - 1] += "\n" + h.slice(1); - } else { - hs.push(h); - } - } - const obj = { - parent: [] - }; - for (const h of hs) { - const key2 = h.slice(0, h.indexOf(" ")); - const value = h.slice(h.indexOf(" ") + 1); - if (Array.isArray(obj[key2])) { - obj[key2].push(value); - } else { - obj[key2] = value; - } - } - if (obj.author) { - obj.author = parseAuthor(obj.author); - } - if (obj.committer) { - obj.committer = parseAuthor(obj.committer); - } - return obj; - } - static renderHeaders(obj) { - let headers = ""; - if (obj.tree) { - headers += `tree ${obj.tree} -`; - } else { - headers += `tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904 -`; - } - if (obj.parent) { - if (obj.parent.length === void 0) { - throw new InternalError(`commit 'parent' property should be an array`); - } - for (const p of obj.parent) { - headers += `parent ${p} -`; - } - } - const author = obj.author; - headers += `author ${formatAuthor(author)} -`; - const committer = obj.committer || obj.author; - headers += `committer ${formatAuthor(committer)} -`; - if (obj.gpgsig) { - headers += "gpgsig" + indent(obj.gpgsig); - } - return headers; - } - static render(obj) { - return _GitCommit.renderHeaders(obj) + "\n" + normalizeNewlines(obj.message); - } - render() { - return this._commit; - } - withoutSignature() { - const commit2 = normalizeNewlines(this._commit); - if (commit2.indexOf("\ngpgsig") === -1) - return commit2; - const headers = commit2.slice(0, commit2.indexOf("\ngpgsig")); - const message = commit2.slice( - commit2.indexOf("-----END PGP SIGNATURE-----\n") + "-----END PGP SIGNATURE-----\n".length - ); - return normalizeNewlines(headers + "\n" + message); - } - isolateSignature() { - const signature = this._commit.slice( - this._commit.indexOf("-----BEGIN PGP SIGNATURE-----"), - this._commit.indexOf("-----END PGP SIGNATURE-----") + "-----END PGP SIGNATURE-----".length - ); - return outdent(signature); - } - static async sign(commit2, sign, secretKey) { - const payload = commit2.withoutSignature(); - const message = _GitCommit.justMessage(commit2._commit); - let { signature } = await sign({ payload, secretKey }); - signature = normalizeNewlines(signature); - const headers = _GitCommit.justHeaders(commit2._commit); - const signedCommit = headers + "\ngpgsig" + indent(signature) + "\n" + message; - return _GitCommit.from(signedCommit); - } -}; -async function resolveTree({ fs, cache, gitdir, oid }) { - if (oid === "4b825dc642cb6eb9a060e54bf8d69288fbee4904") { - return { tree: GitTree.from([]), oid }; - } - const { type, object } = await _readObject({ fs, cache, gitdir, oid }); - if (type === "tag") { - oid = GitAnnotatedTag.from(object).parse().object; - return resolveTree({ fs, cache, gitdir, oid }); - } - if (type === "commit") { - oid = GitCommit.from(object).parse().tree; - return resolveTree({ fs, cache, gitdir, oid }); - } - if (type !== "tree") { - throw new ObjectTypeError(oid, type, "tree"); - } - return { tree: GitTree.from(object), oid }; -} -var GitWalkerRepo = class { - constructor({ fs, gitdir, ref, cache }) { - this.fs = fs; - this.cache = cache; - this.gitdir = gitdir; - this.mapPromise = (async () => { - const map = /* @__PURE__ */ new Map(); - let oid; - try { - oid = await GitRefManager.resolve({ fs, gitdir, ref }); - } catch (e) { - if (e instanceof NotFoundError) { - oid = "4b825dc642cb6eb9a060e54bf8d69288fbee4904"; - } - } - const tree = await resolveTree({ fs, cache: this.cache, gitdir, oid }); - tree.type = "tree"; - tree.mode = "40000"; - map.set(".", tree); - return map; - })(); - const walker = this; - this.ConstructEntry = class TreeEntry { - constructor(fullpath) { - this._fullpath = fullpath; - this._type = false; - this._mode = false; - this._stat = false; - this._content = false; - this._oid = false; - } - async type() { - return walker.type(this); - } - async mode() { - return walker.mode(this); - } - async stat() { - return walker.stat(this); - } - async content() { - return walker.content(this); - } - async oid() { - return walker.oid(this); - } - }; - } - async readdir(entry) { - const filepath = entry._fullpath; - const { fs, cache, gitdir } = this; - const map = await this.mapPromise; - const obj = map.get(filepath); - if (!obj) - throw new Error(`No obj for ${filepath}`); - const oid = obj.oid; - if (!oid) - throw new Error(`No oid for obj ${JSON.stringify(obj)}`); - if (obj.type !== "tree") { - return null; - } - const { type, object } = await _readObject({ fs, cache, gitdir, oid }); - if (type !== obj.type) { - throw new ObjectTypeError(oid, type, obj.type); - } - const tree = GitTree.from(object); - for (const entry2 of tree) { - map.set(join(filepath, entry2.path), entry2); - } - return tree.entries().map((entry2) => join(filepath, entry2.path)); - } - async type(entry) { - if (entry._type === false) { - const map = await this.mapPromise; - const { type } = map.get(entry._fullpath); - entry._type = type; - } - return entry._type; - } - async mode(entry) { - if (entry._mode === false) { - const map = await this.mapPromise; - const { mode } = map.get(entry._fullpath); - entry._mode = normalizeMode(parseInt(mode, 8)); - } - return entry._mode; - } - async stat(_entry) { - } - async content(entry) { - if (entry._content === false) { - const map = await this.mapPromise; - const { fs, cache, gitdir } = this; - const obj = map.get(entry._fullpath); - const oid = obj.oid; - const { type, object } = await _readObject({ fs, cache, gitdir, oid }); - if (type !== "blob") { - entry._content = void 0; - } else { - entry._content = new Uint8Array(object); - } - } - return entry._content; - } - async oid(entry) { - if (entry._oid === false) { - const map = await this.mapPromise; - const obj = map.get(entry._fullpath); - entry._oid = obj.oid; - } - return entry._oid; - } -}; -function TREE({ ref = "HEAD" } = {}) { - const o = /* @__PURE__ */ Object.create(null); - Object.defineProperty(o, GitWalkSymbol, { - value: function({ fs, gitdir, cache }) { - return new GitWalkerRepo({ fs, gitdir, ref, cache }); - } - }); - Object.freeze(o); - return o; -} -var GitWalkerFs = class { - constructor({ fs, dir, gitdir, cache }) { - this.fs = fs; - this.cache = cache; - this.dir = dir; - this.gitdir = gitdir; - const walker = this; - this.ConstructEntry = class WorkdirEntry { - constructor(fullpath) { - this._fullpath = fullpath; - this._type = false; - this._mode = false; - this._stat = false; - this._content = false; - this._oid = false; - } - async type() { - return walker.type(this); - } - async mode() { - return walker.mode(this); - } - async stat() { - return walker.stat(this); - } - async content() { - return walker.content(this); - } - async oid() { - return walker.oid(this); - } - }; - } - async readdir(entry) { - const filepath = entry._fullpath; - const { fs, dir } = this; - const names = await fs.readdir(join(dir, filepath)); - if (names === null) - return null; - return names.map((name) => join(filepath, name)); - } - async type(entry) { - if (entry._type === false) { - await entry.stat(); - } - return entry._type; - } - async mode(entry) { - if (entry._mode === false) { - await entry.stat(); - } - return entry._mode; - } - async stat(entry) { - if (entry._stat === false) { - const { fs, dir } = this; - let stat = await fs.lstat(`${dir}/${entry._fullpath}`); - if (!stat) { - throw new Error( - `ENOENT: no such file or directory, lstat '${entry._fullpath}'` - ); - } - let type = stat.isDirectory() ? "tree" : "blob"; - if (type === "blob" && !stat.isFile() && !stat.isSymbolicLink()) { - type = "special"; - } - entry._type = type; - stat = normalizeStats(stat); - entry._mode = stat.mode; - if (stat.size === -1 && entry._actualSize) { - stat.size = entry._actualSize; - } - entry._stat = stat; - } - return entry._stat; - } - async content(entry) { - if (entry._content === false) { - const { fs, dir } = this; - if (await entry.type() === "tree") { - entry._content = void 0; - } else { - const content = await fs.read(`${dir}/${entry._fullpath}`); - entry._actualSize = content.length; - if (entry._stat && entry._stat.size === -1) { - entry._stat.size = entry._actualSize; - } - entry._content = new Uint8Array(content); - } - } - return entry._content; - } - async oid(entry) { - if (entry._oid === false) { - const { fs, gitdir, cache } = this; - let oid; - await GitIndexManager.acquire({ fs, gitdir, cache }, async function(index2) { - const stage = index2.entriesMap.get(entry._fullpath); - const stats = await entry.stat(); - if (!stage || compareStats(stats, stage)) { - const content = await entry.content(); - if (content === void 0) { - oid = void 0; - } else { - oid = await shasum( - GitObject.wrap({ type: "blob", object: await entry.content() }) - ); - if (stage && oid === stage.oid && stats.mode === stage.mode && compareStats(stats, stage)) { - index2.insert({ - filepath: entry._fullpath, - stats, - oid - }); - } - } - } else { - oid = stage.oid; - } - }); - entry._oid = oid; - } - return entry._oid; - } -}; -function WORKDIR() { - const o = /* @__PURE__ */ Object.create(null); - Object.defineProperty(o, GitWalkSymbol, { - value: function({ fs, dir, gitdir, cache }) { - return new GitWalkerFs({ fs, dir, gitdir, cache }); - } - }); - Object.freeze(o); - return o; -} -function arrayRange(start, end) { - const length = end - start; - return Array.from({ length }, (_, i) => start + i); -} -var flat = typeof Array.prototype.flat === "undefined" ? (entries) => entries.reduce((acc, x) => acc.concat(x), []) : (entries) => entries.flat(); -var RunningMinimum = class { - constructor() { - this.value = null; - } - consider(value) { - if (value === null || value === void 0) - return; - if (this.value === null) { - this.value = value; - } else if (value < this.value) { - this.value = value; - } - } - reset() { - this.value = null; - } -}; -function* unionOfIterators(sets) { - const min = new RunningMinimum(); - let minimum; - const heads = []; - const numsets = sets.length; - for (let i = 0; i < numsets; i++) { - heads[i] = sets[i].next().value; - if (heads[i] !== void 0) { - min.consider(heads[i]); - } - } - if (min.value === null) - return; - while (true) { - const result = []; - minimum = min.value; - min.reset(); - for (let i = 0; i < numsets; i++) { - if (heads[i] !== void 0 && heads[i] === minimum) { - result[i] = heads[i]; - heads[i] = sets[i].next().value; - } else { - result[i] = null; - } - if (heads[i] !== void 0) { - min.consider(heads[i]); - } - } - yield result; - if (min.value === null) - return; - } -} -async function _walk({ - fs, - cache, - dir, - gitdir, - trees, - // @ts-ignore - map = async (_, entry) => entry, - // The default reducer is a flatmap that filters out undefineds. - reduce = async (parent, children2) => { - const flatten = flat(children2); - if (parent !== void 0) - flatten.unshift(parent); - return flatten; - }, - // The default iterate function walks all children concurrently - iterate = (walk2, children2) => Promise.all([...children2].map(walk2)) -}) { - const walkers = trees.map( - (proxy) => proxy[GitWalkSymbol]({ fs, dir, gitdir, cache }) - ); - const root2 = new Array(walkers.length).fill("."); - const range = arrayRange(0, walkers.length); - const unionWalkerFromReaddir = async (entries) => { - range.map((i) => { - entries[i] = entries[i] && new walkers[i].ConstructEntry(entries[i]); - }); - const subdirs = await Promise.all( - range.map((i) => entries[i] ? walkers[i].readdir(entries[i]) : []) - ); - const iterators = subdirs.map((array) => array === null ? [] : array).map((array) => array[Symbol.iterator]()); - return { - entries, - children: unionOfIterators(iterators) - }; - }; - const walk2 = async (root3) => { - const { entries, children: children2 } = await unionWalkerFromReaddir(root3); - const fullpath = entries.find((entry) => entry && entry._fullpath)._fullpath; - const parent = await map(fullpath, entries); - if (parent !== null) { - let walkedChildren = await iterate(walk2, children2); - walkedChildren = walkedChildren.filter((x) => x !== void 0); - return reduce(parent, walkedChildren); - } - }; - return walk2(root2); -} -async function rmRecursive(fs, filepath) { - const entries = await fs.readdir(filepath); - if (entries == null) { - await fs.rm(filepath); - } else if (entries.length) { - await Promise.all( - entries.map((entry) => { - const subpath = join(filepath, entry); - return fs.lstat(subpath).then((stat) => { - if (!stat) - return; - return stat.isDirectory() ? rmRecursive(fs, subpath) : fs.rm(subpath); - }); - }) - ).then(() => fs.rmdir(filepath)); - } else { - await fs.rmdir(filepath); - } -} -function isPromiseLike(obj) { - return isObject(obj) && isFunction(obj.then) && isFunction(obj.catch); -} -function isObject(obj) { - return obj && typeof obj === "object"; -} -function isFunction(obj) { - return typeof obj === "function"; -} -function isPromiseFs(fs) { - const test = (targetFs) => { - try { - return targetFs.readFile().catch((e) => e); - } catch (e) { - return e; - } - }; - return isPromiseLike(test(fs)); -} -var commands = [ - "readFile", - "writeFile", - "mkdir", - "rmdir", - "unlink", - "stat", - "lstat", - "readdir", - "readlink", - "symlink" -]; -function bindFs(target, fs) { - if (isPromiseFs(fs)) { - for (const command of commands) { - target[`_${command}`] = fs[command].bind(fs); - } - } else { - for (const command of commands) { - target[`_${command}`] = (0, import_pify.default)(fs[command].bind(fs)); - } - } - if (isPromiseFs(fs)) { - if (fs.rm) - target._rm = fs.rm.bind(fs); - else if (fs.rmdir.length > 1) - target._rm = fs.rmdir.bind(fs); - else - target._rm = rmRecursive.bind(null, target); - } else { - if (fs.rm) - target._rm = (0, import_pify.default)(fs.rm.bind(fs)); - else if (fs.rmdir.length > 2) - target._rm = (0, import_pify.default)(fs.rmdir.bind(fs)); - else - target._rm = rmRecursive.bind(null, target); - } -} -var FileSystem = class { - constructor(fs) { - if (typeof fs._original_unwrapped_fs !== "undefined") - return fs; - const promises = Object.getOwnPropertyDescriptor(fs, "promises"); - if (promises && promises.enumerable) { - bindFs(this, fs.promises); - } else { - bindFs(this, fs); - } - this._original_unwrapped_fs = fs; - } - /** - * Return true if a file exists, false if it doesn't exist. - * Rethrows errors that aren't related to file existance. - */ - async exists(filepath, options = {}) { - try { - await this._stat(filepath); - return true; - } catch (err) { - if (err.code === "ENOENT" || err.code === "ENOTDIR") { - return false; - } else { - console.log('Unhandled error in "FileSystem.exists()" function', err); - throw err; - } - } - } - /** - * Return the contents of a file if it exists, otherwise returns null. - * - * @param {string} filepath - * @param {object} [options] - * - * @returns {Promise} - */ - async read(filepath, options = {}) { - try { - let buffer2 = await this._readFile(filepath, options); - if (typeof buffer2 !== "string") { - buffer2 = Buffer.from(buffer2); - } - return buffer2; - } catch (err) { - return null; - } - } - /** - * Write a file (creating missing directories if need be) without throwing errors. - * - * @param {string} filepath - * @param {Buffer|Uint8Array|string} contents - * @param {object|string} [options] - */ - async write(filepath, contents, options = {}) { - try { - await this._writeFile(filepath, contents, options); - return; - } catch (err) { - await this.mkdir(dirname(filepath)); - await this._writeFile(filepath, contents, options); - } - } - /** - * Make a directory (or series of nested directories) without throwing an error if it already exists. - */ - async mkdir(filepath, _selfCall = false) { - try { - await this._mkdir(filepath); - return; - } catch (err) { - if (err === null) - return; - if (err.code === "EEXIST") - return; - if (_selfCall) - throw err; - if (err.code === "ENOENT") { - const parent = dirname(filepath); - if (parent === "." || parent === "/" || parent === filepath) - throw err; - await this.mkdir(parent); - await this.mkdir(filepath, true); - } - } - } - /** - * Delete a file without throwing an error if it is already deleted. - */ - async rm(filepath) { - try { - await this._unlink(filepath); - } catch (err) { - if (err.code !== "ENOENT") - throw err; - } - } - /** - * Delete a directory without throwing an error if it is already deleted. - */ - async rmdir(filepath, opts) { - try { - if (opts && opts.recursive) { - await this._rm(filepath, opts); - } else { - await this._rmdir(filepath); - } - } catch (err) { - if (err.code !== "ENOENT") - throw err; - } - } - /** - * Read a directory without throwing an error is the directory doesn't exist - */ - async readdir(filepath) { - try { - const names = await this._readdir(filepath); - names.sort(compareStrings); - return names; - } catch (err) { - if (err.code === "ENOTDIR") - return null; - return []; - } - } - /** - * Return a flast list of all the files nested inside a directory - * - * Based on an elegant concurrent recursive solution from SO - * https://stackoverflow.com/a/45130990/2168416 - */ - async readdirDeep(dir) { - const subdirs = await this._readdir(dir); - const files = await Promise.all( - subdirs.map(async (subdir) => { - const res = dir + "/" + subdir; - return (await this._stat(res)).isDirectory() ? this.readdirDeep(res) : res; - }) - ); - return files.reduce((a, f) => a.concat(f), []); - } - /** - * Return the Stats of a file/symlink if it exists, otherwise returns null. - * Rethrows errors that aren't related to file existance. - */ - async lstat(filename) { - try { - const stats = await this._lstat(filename); - return stats; - } catch (err) { - if (err.code === "ENOENT") { - return null; - } - throw err; - } - } - /** - * Reads the contents of a symlink if it exists, otherwise returns null. - * Rethrows errors that aren't related to file existance. - */ - async readlink(filename, opts = { encoding: "buffer" }) { - try { - const link = await this._readlink(filename, opts); - return Buffer.isBuffer(link) ? link : Buffer.from(link); - } catch (err) { - if (err.code === "ENOENT") { - return null; - } - throw err; - } - } - /** - * Write the contents of buffer to a symlink. - */ - async writelink(filename, buffer2) { - return this._symlink(buffer2.toString("utf8"), filename); - } -}; -function assertParameter(name, value) { - if (value === void 0) { - throw new MissingParameterError(name); - } -} -async function modified(entry, base) { - if (!entry && !base) - return false; - if (entry && !base) - return true; - if (!entry && base) - return true; - if (await entry.type() === "tree" && await base.type() === "tree") { - return false; - } - if (await entry.type() === await base.type() && await entry.mode() === await base.mode() && await entry.oid() === await base.oid()) { - return false; - } - return true; -} -async function abortMerge({ - fs: _fs, - dir, - gitdir = join(dir, ".git"), - commit: commit2 = "HEAD", - cache = {} -}) { - try { - assertParameter("fs", _fs); - assertParameter("dir", dir); - assertParameter("gitdir", gitdir); - const fs = new FileSystem(_fs); - const trees = [TREE({ ref: commit2 }), WORKDIR(), STAGE()]; - let unmergedPaths = []; - await GitIndexManager.acquire({ fs, gitdir, cache }, async function(index2) { - unmergedPaths = index2.unmergedPaths; - }); - const results = await _walk({ - fs, - cache, - dir, - gitdir, - trees, - map: async function(path2, [head, workdir, index2]) { - const staged = !await modified(workdir, index2); - const unmerged = unmergedPaths.includes(path2); - const unmodified = !await modified(index2, head); - if (staged || unmerged) { - return head ? { - path: path2, - mode: await head.mode(), - oid: await head.oid(), - type: await head.type(), - content: await head.content() - } : void 0; - } - if (unmodified) - return false; - else - throw new IndexResetError(path2); - } - }); - await GitIndexManager.acquire({ fs, gitdir, cache }, async function(index2) { - for (const entry of results) { - if (entry === false) - continue; - if (!entry) { - await fs.rmdir(`${dir}/${entry.path}`, { recursive: true }); - index2.delete({ filepath: entry.path }); - continue; - } - if (entry.type === "blob") { - const content = new TextDecoder().decode(entry.content); - await fs.write(`${dir}/${entry.path}`, content, { mode: entry.mode }); - index2.insert({ - filepath: entry.path, - oid: entry.oid, - stage: 0 - }); - } - } - }); - } catch (err) { - err.caller = "git.abortMerge"; - throw err; - } -} -var GitIgnoreManager = class { - static async isIgnored({ fs, dir, gitdir = join(dir, ".git"), filepath }) { - if (basename(filepath) === ".git") - return true; - if (filepath === ".") - return false; - let excludes = ""; - const excludesFile = join(gitdir, "info", "exclude"); - if (await fs.exists(excludesFile)) { - excludes = await fs.read(excludesFile, "utf8"); - } - const pairs = [ - { - gitignore: join(dir, ".gitignore"), - filepath - } - ]; - const pieces = filepath.split("/").filter(Boolean); - for (let i = 1; i < pieces.length; i++) { - const folder = pieces.slice(0, i).join("/"); - const file = pieces.slice(i).join("/"); - pairs.push({ - gitignore: join(dir, folder, ".gitignore"), - filepath: file - }); - } - let ignoredStatus = false; - for (const p of pairs) { - let file; - try { - file = await fs.read(p.gitignore, "utf8"); - } catch (err) { - if (err.code === "NOENT") - continue; - } - const ign = (0, import_ignore.default)().add(excludes); - ign.add(file); - const parentdir = dirname(p.filepath); - if (parentdir !== "." && ign.ignores(parentdir)) - return true; - if (ignoredStatus) { - ignoredStatus = !ign.test(p.filepath).unignored; - } else { - ignoredStatus = ign.test(p.filepath).ignored; - } - } - return ignoredStatus; - } -}; -async function writeObjectLoose({ fs, gitdir, object, format, oid }) { - if (format !== "deflated") { - throw new InternalError( - "GitObjectStoreLoose expects objects to write to be in deflated format" - ); - } - const source = `objects/${oid.slice(0, 2)}/${oid.slice(2)}`; - const filepath = `${gitdir}/${source}`; - if (!await fs.exists(filepath)) - await fs.write(filepath, object); -} -var supportsCompressionStream = null; -async function deflate(buffer2) { - if (supportsCompressionStream === null) { - supportsCompressionStream = testCompressionStream(); - } - return supportsCompressionStream ? browserDeflate(buffer2) : import_pako.default.deflate(buffer2); -} -async function browserDeflate(buffer2) { - const cs = new CompressionStream("deflate"); - const c = new Blob([buffer2]).stream().pipeThrough(cs); - return new Uint8Array(await new Response(c).arrayBuffer()); -} -function testCompressionStream() { - try { - const cs = new CompressionStream("deflate"); - new Blob([]).stream(); - if (cs) - return true; - } catch (_) { - } - return false; -} -async function _writeObject({ - fs, - gitdir, - type, - object, - format = "content", - oid = void 0, - dryRun = false -}) { - if (format !== "deflated") { - if (format !== "wrapped") { - object = GitObject.wrap({ type, object }); - } - oid = await shasum(object); - object = Buffer.from(await deflate(object)); - } - if (!dryRun) { - await writeObjectLoose({ fs, gitdir, object, format: "deflated", oid }); - } - return oid; -} -function posixifyPathBuffer(buffer2) { - let idx; - while (~(idx = buffer2.indexOf(92))) - buffer2[idx] = 47; - return buffer2; -} -async function add({ - fs: _fs, - dir, - gitdir = join(dir, ".git"), - filepath, - cache = {}, - force = false, - parallel = true -}) { - try { - assertParameter("fs", _fs); - assertParameter("dir", dir); - assertParameter("gitdir", gitdir); - assertParameter("filepath", filepath); - const fs = new FileSystem(_fs); - await GitIndexManager.acquire({ fs, gitdir, cache }, async (index2) => { - return addToIndex({ - dir, - gitdir, - fs, - filepath, - index: index2, - force, - parallel - }); - }); - } catch (err) { - err.caller = "git.add"; - throw err; - } -} -async function addToIndex({ - dir, - gitdir, - fs, - filepath, - index: index2, - force, - parallel -}) { - filepath = Array.isArray(filepath) ? filepath : [filepath]; - const promises = filepath.map(async (currentFilepath) => { - if (!force) { - const ignored = await GitIgnoreManager.isIgnored({ - fs, - dir, - gitdir, - filepath: currentFilepath - }); - if (ignored) - return; - } - const stats = await fs.lstat(join(dir, currentFilepath)); - if (!stats) - throw new NotFoundError(currentFilepath); - if (stats.isDirectory()) { - const children2 = await fs.readdir(join(dir, currentFilepath)); - if (parallel) { - const promises2 = children2.map( - (child) => addToIndex({ - dir, - gitdir, - fs, - filepath: [join(currentFilepath, child)], - index: index2, - force, - parallel - }) - ); - await Promise.all(promises2); - } else { - for (const child of children2) { - await addToIndex({ - dir, - gitdir, - fs, - filepath: [join(currentFilepath, child)], - index: index2, - force, - parallel - }); - } - } - } else { - const object = stats.isSymbolicLink() ? await fs.readlink(join(dir, currentFilepath)).then(posixifyPathBuffer) : await fs.read(join(dir, currentFilepath)); - if (object === null) - throw new NotFoundError(currentFilepath); - const oid = await _writeObject({ fs, gitdir, type: "blob", object }); - index2.insert({ filepath: currentFilepath, stats, oid }); - } - }); - const settledPromises = await Promise.allSettled(promises); - const rejectedPromises = settledPromises.filter((settle) => settle.status === "rejected").map((settle) => settle.reason); - if (rejectedPromises.length > 1) { - throw new MultipleGitError(rejectedPromises); - } - if (rejectedPromises.length === 1) { - throw rejectedPromises[0]; - } - const fulfilledPromises = settledPromises.filter((settle) => settle.status === "fulfilled" && settle.value).map((settle) => settle.value); - return fulfilledPromises; -} -async function _commit({ - fs, - cache, - onSign, - gitdir, - message, - author, - committer, - signingKey, - dryRun = false, - noUpdateBranch = false, - ref, - parent, - tree -}) { - if (!ref) { - ref = await GitRefManager.resolve({ - fs, - gitdir, - ref: "HEAD", - depth: 2 - }); - } - return GitIndexManager.acquire( - { fs, gitdir, cache, allowUnmerged: false }, - async function(index2) { - const inodes = flatFileListToDirectoryStructure(index2.entries); - const inode = inodes.get("."); - if (!tree) { - tree = await constructTree({ fs, gitdir, inode, dryRun }); - } - if (!parent) { - try { - parent = [ - await GitRefManager.resolve({ - fs, - gitdir, - ref - }) - ]; - } catch (err) { - parent = []; - } - } else { - parent = await Promise.all( - parent.map((p) => { - return GitRefManager.resolve({ fs, gitdir, ref: p }); - }) - ); - } - let comm = GitCommit.from({ - tree, - parent, - author, - committer, - message - }); - if (signingKey) { - comm = await GitCommit.sign(comm, onSign, signingKey); - } - const oid = await _writeObject({ - fs, - gitdir, - type: "commit", - object: comm.toObject(), - dryRun - }); - if (!noUpdateBranch && !dryRun) { - await GitRefManager.writeRef({ - fs, - gitdir, - ref, - value: oid - }); - } - return oid; - } - ); -} -async function constructTree({ fs, gitdir, inode, dryRun }) { - const children2 = inode.children; - for (const inode2 of children2) { - if (inode2.type === "tree") { - inode2.metadata.mode = "040000"; - inode2.metadata.oid = await constructTree({ fs, gitdir, inode: inode2, dryRun }); - } - } - const entries = children2.map((inode2) => ({ - mode: inode2.metadata.mode, - path: inode2.basename, - oid: inode2.metadata.oid, - type: inode2.type - })); - const tree = GitTree.from(entries); - const oid = await _writeObject({ - fs, - gitdir, - type: "tree", - object: tree.toObject(), - dryRun - }); - return oid; -} -async function resolveFilepath({ fs, cache, gitdir, oid, filepath }) { - if (filepath.startsWith("/")) { - throw new InvalidFilepathError("leading-slash"); - } else if (filepath.endsWith("/")) { - throw new InvalidFilepathError("trailing-slash"); - } - const _oid = oid; - const result = await resolveTree({ fs, cache, gitdir, oid }); - const tree = result.tree; - if (filepath === "") { - oid = result.oid; - } else { - const pathArray = filepath.split("/"); - oid = await _resolveFilepath({ - fs, - cache, - gitdir, - tree, - pathArray, - oid: _oid, - filepath - }); - } - return oid; -} -async function _resolveFilepath({ - fs, - cache, - gitdir, - tree, - pathArray, - oid, - filepath -}) { - const name = pathArray.shift(); - for (const entry of tree) { - if (entry.path === name) { - if (pathArray.length === 0) { - return entry.oid; - } else { - const { type, object } = await _readObject({ - fs, - cache, - gitdir, - oid: entry.oid - }); - if (type !== "tree") { - throw new ObjectTypeError(oid, type, "tree", filepath); - } - tree = GitTree.from(object); - return _resolveFilepath({ - fs, - cache, - gitdir, - tree, - pathArray, - oid, - filepath - }); - } - } - } - throw new NotFoundError(`file or directory found at "${oid}:${filepath}"`); -} -async function _readTree({ - fs, - cache, - gitdir, - oid, - filepath = void 0 -}) { - if (filepath !== void 0) { - oid = await resolveFilepath({ fs, cache, gitdir, oid, filepath }); - } - const { tree, oid: treeOid } = await resolveTree({ fs, cache, gitdir, oid }); - const result = { - oid: treeOid, - tree: tree.entries() - }; - return result; -} -async function _writeTree({ fs, gitdir, tree }) { - const object = GitTree.from(tree).toObject(); - const oid = await _writeObject({ - fs, - gitdir, - type: "tree", - object, - format: "content" - }); - return oid; -} -async function _addNote({ - fs, - cache, - onSign, - gitdir, - ref, - oid, - note, - force, - author, - committer, - signingKey -}) { - let parent; - try { - parent = await GitRefManager.resolve({ gitdir, fs, ref }); - } catch (err) { - if (!(err instanceof NotFoundError)) { - throw err; - } - } - const result = await _readTree({ - fs, - cache, - gitdir, - oid: parent || "4b825dc642cb6eb9a060e54bf8d69288fbee4904" - }); - let tree = result.tree; - if (force) { - tree = tree.filter((entry) => entry.path !== oid); - } else { - for (const entry of tree) { - if (entry.path === oid) { - throw new AlreadyExistsError("note", oid); - } - } - } - if (typeof note === "string") { - note = Buffer.from(note, "utf8"); - } - const noteOid = await _writeObject({ - fs, - gitdir, - type: "blob", - object: note, - format: "content" - }); - tree.push({ mode: "100644", path: oid, oid: noteOid, type: "blob" }); - const treeOid = await _writeTree({ - fs, - gitdir, - tree - }); - const commitOid = await _commit({ - fs, - cache, - onSign, - gitdir, - ref, - tree: treeOid, - parent: parent && [parent], - message: `Note added by 'isomorphic-git addNote' -`, - author, - committer, - signingKey - }); - return commitOid; -} -async function _getConfig({ fs, gitdir, path: path2 }) { - const config = await GitConfigManager.get({ fs, gitdir }); - return config.get(path2); -} -async function normalizeAuthorObject({ fs, gitdir, author = {} }) { - let { name, email, timestamp, timezoneOffset } = author; - name = name || await _getConfig({ fs, gitdir, path: "user.name" }); - email = email || await _getConfig({ fs, gitdir, path: "user.email" }) || ""; - if (name === void 0) { - return void 0; - } - timestamp = timestamp != null ? timestamp : Math.floor(Date.now() / 1e3); - timezoneOffset = timezoneOffset != null ? timezoneOffset : new Date(timestamp * 1e3).getTimezoneOffset(); - return { name, email, timestamp, timezoneOffset }; -} -async function normalizeCommitterObject({ - fs, - gitdir, - author, - committer -}) { - committer = Object.assign({}, committer || author); - if (author) { - committer.timestamp = committer.timestamp || author.timestamp; - committer.timezoneOffset = committer.timezoneOffset || author.timezoneOffset; - } - committer = await normalizeAuthorObject({ fs, gitdir, author: committer }); - return committer; -} -async function addNote({ - fs: _fs, - onSign, - dir, - gitdir = join(dir, ".git"), - ref = "refs/notes/commits", - oid, - note, - force, - author: _author, - committer: _committer, - signingKey, - cache = {} -}) { - try { - assertParameter("fs", _fs); - assertParameter("gitdir", gitdir); - assertParameter("oid", oid); - assertParameter("note", note); - if (signingKey) { - assertParameter("onSign", onSign); - } - const fs = new FileSystem(_fs); - const author = await normalizeAuthorObject({ fs, gitdir, author: _author }); - if (!author) - throw new MissingNameError("author"); - const committer = await normalizeCommitterObject({ - fs, - gitdir, - author, - committer: _committer - }); - if (!committer) - throw new MissingNameError("committer"); - return await _addNote({ - fs: new FileSystem(fs), - cache, - onSign, - gitdir, - ref, - oid, - note, - force, - author, - committer, - signingKey - }); - } catch (err) { - err.caller = "git.addNote"; - throw err; - } -} -async function _addRemote({ fs, gitdir, remote, url, force }) { - if (remote !== import_clean_git_ref.default.clean(remote)) { - throw new InvalidRefNameError(remote, import_clean_git_ref.default.clean(remote)); - } - const config = await GitConfigManager.get({ fs, gitdir }); - if (!force) { - const remoteNames = await config.getSubsections("remote"); - if (remoteNames.includes(remote)) { - if (url !== await config.get(`remote.${remote}.url`)) { - throw new AlreadyExistsError("remote", remote); - } - } - } - await config.set(`remote.${remote}.url`, url); - await config.set( - `remote.${remote}.fetch`, - `+refs/heads/*:refs/remotes/${remote}/*` - ); - await GitConfigManager.save({ fs, gitdir, config }); -} -async function addRemote({ - fs, - dir, - gitdir = join(dir, ".git"), - remote, - url, - force = false -}) { - try { - assertParameter("fs", fs); - assertParameter("gitdir", gitdir); - assertParameter("remote", remote); - assertParameter("url", url); - return await _addRemote({ - fs: new FileSystem(fs), - gitdir, - remote, - url, - force - }); - } catch (err) { - err.caller = "git.addRemote"; - throw err; - } -} -async function _annotatedTag({ - fs, - cache, - onSign, - gitdir, - ref, - tagger, - message = ref, - gpgsig, - object, - signingKey, - force = false -}) { - ref = ref.startsWith("refs/tags/") ? ref : `refs/tags/${ref}`; - if (!force && await GitRefManager.exists({ fs, gitdir, ref })) { - throw new AlreadyExistsError("tag", ref); - } - const oid = await GitRefManager.resolve({ - fs, - gitdir, - ref: object || "HEAD" - }); - const { type } = await _readObject({ fs, cache, gitdir, oid }); - let tagObject = GitAnnotatedTag.from({ - object: oid, - type, - tag: ref.replace("refs/tags/", ""), - tagger, - message, - gpgsig - }); - if (signingKey) { - tagObject = await GitAnnotatedTag.sign(tagObject, onSign, signingKey); - } - const value = await _writeObject({ - fs, - gitdir, - type: "tag", - object: tagObject.toObject() - }); - await GitRefManager.writeRef({ fs, gitdir, ref, value }); -} -async function annotatedTag({ - fs: _fs, - onSign, - dir, - gitdir = join(dir, ".git"), - ref, - tagger: _tagger, - message = ref, - gpgsig, - object, - signingKey, - force = false, - cache = {} -}) { - try { - assertParameter("fs", _fs); - assertParameter("gitdir", gitdir); - assertParameter("ref", ref); - if (signingKey) { - assertParameter("onSign", onSign); - } - const fs = new FileSystem(_fs); - const tagger = await normalizeAuthorObject({ fs, gitdir, author: _tagger }); - if (!tagger) - throw new MissingNameError("tagger"); - return await _annotatedTag({ - fs, - cache, - onSign, - gitdir, - ref, - tagger, - message, - gpgsig, - object, - signingKey, - force - }); - } catch (err) { - err.caller = "git.annotatedTag"; - throw err; - } -} -async function _branch({ - fs, - gitdir, - ref, - object, - checkout: checkout2 = false, - force = false -}) { - if (ref !== import_clean_git_ref.default.clean(ref)) { - throw new InvalidRefNameError(ref, import_clean_git_ref.default.clean(ref)); - } - const fullref = `refs/heads/${ref}`; - if (!force) { - const exist = await GitRefManager.exists({ fs, gitdir, ref: fullref }); - if (exist) { - throw new AlreadyExistsError("branch", ref, false); - } - } - let oid; - try { - oid = await GitRefManager.resolve({ fs, gitdir, ref: object || "HEAD" }); - } catch (e) { - } - if (oid) { - await GitRefManager.writeRef({ fs, gitdir, ref: fullref, value: oid }); - } - if (checkout2) { - await GitRefManager.writeSymbolicRef({ - fs, - gitdir, - ref: "HEAD", - value: fullref - }); - } -} -async function branch({ - fs, - dir, - gitdir = join(dir, ".git"), - ref, - object, - checkout: checkout2 = false, - force = false -}) { - try { - assertParameter("fs", fs); - assertParameter("gitdir", gitdir); - assertParameter("ref", ref); - return await _branch({ - fs: new FileSystem(fs), - gitdir, - ref, - object, - checkout: checkout2, - force - }); - } catch (err) { - err.caller = "git.branch"; - throw err; - } -} -var worthWalking = (filepath, root2) => { - if (filepath === "." || root2 == null || root2.length === 0 || root2 === ".") { - return true; - } - if (root2.length >= filepath.length) { - return root2.startsWith(filepath); - } else { - return filepath.startsWith(root2); - } -}; -async function _checkout({ - fs, - cache, - onProgress, - dir, - gitdir, - remote, - ref, - filepaths, - noCheckout, - noUpdateHead, - dryRun, - force, - track = true -}) { - let oid; - try { - oid = await GitRefManager.resolve({ fs, gitdir, ref }); - } catch (err) { - if (ref === "HEAD") - throw err; - const remoteRef = `${remote}/${ref}`; - oid = await GitRefManager.resolve({ - fs, - gitdir, - ref: remoteRef - }); - if (track) { - const config = await GitConfigManager.get({ fs, gitdir }); - await config.set(`branch.${ref}.remote`, remote); - await config.set(`branch.${ref}.merge`, `refs/heads/${ref}`); - await GitConfigManager.save({ fs, gitdir, config }); - } - await GitRefManager.writeRef({ - fs, - gitdir, - ref: `refs/heads/${ref}`, - value: oid - }); - } - if (!noCheckout) { - let ops; - try { - ops = await analyze({ - fs, - cache, - onProgress, - dir, - gitdir, - ref, - force, - filepaths - }); - } catch (err) { - if (err instanceof NotFoundError && err.data.what === oid) { - throw new CommitNotFetchedError(ref, oid); - } else { - throw err; - } - } - const conflicts2 = ops.filter(([method2]) => method2 === "conflict").map(([method2, fullpath]) => fullpath); - if (conflicts2.length > 0) { - throw new CheckoutConflictError(conflicts2); - } - const errors = ops.filter(([method2]) => method2 === "error").map(([method2, fullpath]) => fullpath); - if (errors.length > 0) { - throw new InternalError(errors.join(", ")); - } - if (dryRun) { - return; - } - let count = 0; - const total = ops.length; - await GitIndexManager.acquire({ fs, gitdir, cache }, async function(index2) { - await Promise.all( - ops.filter( - ([method2]) => method2 === "delete" || method2 === "delete-index" - ).map(async function([method2, fullpath]) { - const filepath = `${dir}/${fullpath}`; - if (method2 === "delete") { - await fs.rm(filepath); - } - index2.delete({ filepath: fullpath }); - if (onProgress) { - await onProgress({ - phase: "Updating workdir", - loaded: ++count, - total - }); - } - }) - ); - }); - await GitIndexManager.acquire({ fs, gitdir, cache }, async function(index2) { - for (const [method2, fullpath] of ops) { - if (method2 === "rmdir" || method2 === "rmdir-index") { - const filepath = `${dir}/${fullpath}`; - try { - if (method2 === "rmdir-index") { - index2.delete({ filepath: fullpath }); - } - await fs.rmdir(filepath); - if (onProgress) { - await onProgress({ - phase: "Updating workdir", - loaded: ++count, - total - }); - } - } catch (e) { - if (e.code === "ENOTEMPTY") { - console.log( - `Did not delete ${fullpath} because directory is not empty` - ); - } else { - throw e; - } - } - } - } - }); - await Promise.all( - ops.filter(([method2]) => method2 === "mkdir" || method2 === "mkdir-index").map(async function([_, fullpath]) { - const filepath = `${dir}/${fullpath}`; - await fs.mkdir(filepath); - if (onProgress) { - await onProgress({ - phase: "Updating workdir", - loaded: ++count, - total - }); - } - }) - ); - await GitIndexManager.acquire({ fs, gitdir, cache }, async function(index2) { - await Promise.all( - ops.filter( - ([method2]) => method2 === "create" || method2 === "create-index" || method2 === "update" || method2 === "mkdir-index" - ).map(async function([method2, fullpath, oid2, mode, chmod]) { - const filepath = `${dir}/${fullpath}`; - try { - if (method2 !== "create-index" && method2 !== "mkdir-index") { - const { object } = await _readObject({ fs, cache, gitdir, oid: oid2 }); - if (chmod) { - await fs.rm(filepath); - } - if (mode === 33188) { - await fs.write(filepath, object); - } else if (mode === 33261) { - await fs.write(filepath, object, { mode: 511 }); - } else if (mode === 40960) { - await fs.writelink(filepath, object); - } else { - throw new InternalError( - `Invalid mode 0o${mode.toString(8)} detected in blob ${oid2}` - ); - } - } - const stats = await fs.lstat(filepath); - if (mode === 33261) { - stats.mode = 493; - } - if (method2 === "mkdir-index") { - stats.mode = 57344; - } - index2.insert({ - filepath: fullpath, - stats, - oid: oid2 - }); - if (onProgress) { - await onProgress({ - phase: "Updating workdir", - loaded: ++count, - total - }); - } - } catch (e) { - console.log(e); - } - }) - ); - }); - } - if (!noUpdateHead) { - const fullRef = await GitRefManager.expand({ fs, gitdir, ref }); - if (fullRef.startsWith("refs/heads")) { - await GitRefManager.writeSymbolicRef({ - fs, - gitdir, - ref: "HEAD", - value: fullRef - }); - } else { - await GitRefManager.writeRef({ fs, gitdir, ref: "HEAD", value: oid }); - } - } -} -async function analyze({ - fs, - cache, - onProgress, - dir, - gitdir, - ref, - force, - filepaths -}) { - let count = 0; - return _walk({ - fs, - cache, - dir, - gitdir, - trees: [TREE({ ref }), WORKDIR(), STAGE()], - map: async function(fullpath, [commit2, workdir, stage]) { - if (fullpath === ".") - return; - if (filepaths && !filepaths.some((base) => worthWalking(fullpath, base))) { - return null; - } - if (onProgress) { - await onProgress({ phase: "Analyzing workdir", loaded: ++count }); - } - const key2 = [!!stage, !!commit2, !!workdir].map(Number).join(""); - switch (key2) { - case "000": - return; - case "001": - if (force && filepaths && filepaths.includes(fullpath)) { - return ["delete", fullpath]; - } - return; - case "010": { - switch (await commit2.type()) { - case "tree": { - return ["mkdir", fullpath]; - } - case "blob": { - return [ - "create", - fullpath, - await commit2.oid(), - await commit2.mode() - ]; - } - case "commit": { - return [ - "mkdir-index", - fullpath, - await commit2.oid(), - await commit2.mode() - ]; - } - default: { - return [ - "error", - `new entry Unhandled type ${await commit2.type()}` - ]; - } - } - } - case "011": { - switch (`${await commit2.type()}-${await workdir.type()}`) { - case "tree-tree": { - return; - } - case "tree-blob": - case "blob-tree": { - return ["conflict", fullpath]; - } - case "blob-blob": { - if (await commit2.oid() !== await workdir.oid()) { - if (force) { - return [ - "update", - fullpath, - await commit2.oid(), - await commit2.mode(), - await commit2.mode() !== await workdir.mode() - ]; - } else { - return ["conflict", fullpath]; - } - } else { - if (await commit2.mode() !== await workdir.mode()) { - if (force) { - return [ - "update", - fullpath, - await commit2.oid(), - await commit2.mode(), - true - ]; - } else { - return ["conflict", fullpath]; - } - } else { - return [ - "create-index", - fullpath, - await commit2.oid(), - await commit2.mode() - ]; - } - } - } - case "commit-tree": { - return; - } - case "commit-blob": { - return ["conflict", fullpath]; - } - default: { - return ["error", `new entry Unhandled type ${commit2.type}`]; - } - } - } - case "100": { - return ["delete-index", fullpath]; - } - case "101": { - switch (await stage.type()) { - case "tree": { - return ["rmdir", fullpath]; - } - case "blob": { - if (await stage.oid() !== await workdir.oid()) { - if (force) { - return ["delete", fullpath]; - } else { - return ["conflict", fullpath]; - } - } else { - return ["delete", fullpath]; - } - } - case "commit": { - return ["rmdir-index", fullpath]; - } - default: { - return [ - "error", - `delete entry Unhandled type ${await stage.type()}` - ]; - } - } - } - case "110": - case "111": { - switch (`${await stage.type()}-${await commit2.type()}`) { - case "tree-tree": { - return; - } - case "blob-blob": { - if (await stage.oid() === await commit2.oid() && await stage.mode() === await commit2.mode() && !force) { - return; - } - if (workdir) { - if (await workdir.oid() !== await stage.oid() && await workdir.oid() !== await commit2.oid()) { - if (force) { - return [ - "update", - fullpath, - await commit2.oid(), - await commit2.mode(), - await commit2.mode() !== await workdir.mode() - ]; - } else { - return ["conflict", fullpath]; - } - } - } else if (force) { - return [ - "update", - fullpath, - await commit2.oid(), - await commit2.mode(), - await commit2.mode() !== await stage.mode() - ]; - } - if (await commit2.mode() !== await stage.mode()) { - return [ - "update", - fullpath, - await commit2.oid(), - await commit2.mode(), - true - ]; - } - if (await commit2.oid() !== await stage.oid()) { - return [ - "update", - fullpath, - await commit2.oid(), - await commit2.mode(), - false - ]; - } else { - return; - } - } - case "tree-blob": { - return ["update-dir-to-blob", fullpath, await commit2.oid()]; - } - case "blob-tree": { - return ["update-blob-to-tree", fullpath]; - } - case "commit-commit": { - return [ - "mkdir-index", - fullpath, - await commit2.oid(), - await commit2.mode() - ]; - } - default: { - return [ - "error", - `update entry Unhandled type ${await stage.type()}-${await commit2.type()}` - ]; - } - } - } - } - }, - // Modify the default flat mapping - reduce: async function(parent, children2) { - children2 = flat(children2); - if (!parent) { - return children2; - } else if (parent && parent[0] === "rmdir") { - children2.push(parent); - return children2; - } else { - children2.unshift(parent); - return children2; - } - } - }); -} -async function checkout({ - fs, - onProgress, - dir, - gitdir = join(dir, ".git"), - remote = "origin", - ref: _ref, - filepaths, - noCheckout = false, - noUpdateHead = _ref === void 0, - dryRun = false, - force = false, - track = true, - cache = {} -}) { - try { - assertParameter("fs", fs); - assertParameter("dir", dir); - assertParameter("gitdir", gitdir); - const ref = _ref || "HEAD"; - return await _checkout({ - fs: new FileSystem(fs), - cache, - onProgress, - dir, - gitdir, - remote, - ref, - filepaths, - noCheckout, - noUpdateHead, - dryRun, - force, - track - }); - } catch (err) { - err.caller = "git.checkout"; - throw err; - } -} -var abbreviateRx = new RegExp("^refs/(heads/|tags/|remotes/)?(.*)"); -function abbreviateRef(ref) { - const match = abbreviateRx.exec(ref); - if (match) { - if (match[1] === "remotes/" && ref.endsWith("/HEAD")) { - return match[2].slice(0, -5); - } else { - return match[2]; - } - } - return ref; -} -async function _currentBranch({ - fs, - gitdir, - fullname = false, - test = false -}) { - const ref = await GitRefManager.resolve({ - fs, - gitdir, - ref: "HEAD", - depth: 2 - }); - if (test) { - try { - await GitRefManager.resolve({ fs, gitdir, ref }); - } catch (_) { - return; - } - } - if (!ref.startsWith("refs/")) - return; - return fullname ? ref : abbreviateRef(ref); -} -function translateSSHtoHTTP(url) { - url = url.replace(/^git@([^:]+):/, "https://$1/"); - url = url.replace(/^ssh:\/\//, "https://"); - return url; -} -function calculateBasicAuthHeader({ username = "", password = "" }) { - return `Basic ${Buffer.from(`${username}:${password}`).toString("base64")}`; -} -async function forAwait(iterable, cb) { - const iter = getIterator(iterable); - while (true) { - const { value, done } = await iter.next(); - if (value) - await cb(value); - if (done) - break; - } - if (iter.return) - iter.return(); -} -async function collect(iterable) { - let size = 0; - const buffers = []; - await forAwait(iterable, (value) => { - buffers.push(value); - size += value.byteLength; - }); - const result = new Uint8Array(size); - let nextIndex = 0; - for (const buffer2 of buffers) { - result.set(buffer2, nextIndex); - nextIndex += buffer2.byteLength; - } - return result; -} -function extractAuthFromUrl(url) { - let userpass = url.match(/^https?:\/\/([^/]+)@/); - if (userpass == null) - return { url, auth: {} }; - userpass = userpass[1]; - const [username, password] = userpass.split(":"); - url = url.replace(`${userpass}@`, ""); - return { url, auth: { username, password } }; -} -function padHex(b, n) { - const s = n.toString(16); - return "0".repeat(b - s.length) + s; -} -var GitPktLine = class { - static flush() { - return Buffer.from("0000", "utf8"); - } - static delim() { - return Buffer.from("0001", "utf8"); - } - static encode(line) { - if (typeof line === "string") { - line = Buffer.from(line); - } - const length = line.length + 4; - const hexlength = padHex(4, length); - return Buffer.concat([Buffer.from(hexlength, "utf8"), line]); - } - static streamReader(stream) { - const reader = new StreamReader(stream); - return async function read() { - try { - let length = await reader.read(4); - if (length == null) - return true; - length = parseInt(length.toString("utf8"), 16); - if (length === 0) - return null; - if (length === 1) - return null; - const buffer2 = await reader.read(length - 4); - if (buffer2 == null) - return true; - return buffer2; - } catch (err) { - stream.error = err; - return true; - } - }; - } -}; -async function parseCapabilitiesV2(read) { - const capabilities2 = {}; - let line; - while (true) { - line = await read(); - if (line === true) - break; - if (line === null) - continue; - line = line.toString("utf8").replace(/\n$/, ""); - const i = line.indexOf("="); - if (i > -1) { - const key2 = line.slice(0, i); - const value = line.slice(i + 1); - capabilities2[key2] = value; - } else { - capabilities2[line] = true; - } - } - return { protocolVersion: 2, capabilities2 }; -} -async function parseRefsAdResponse(stream, { service }) { - const capabilities = /* @__PURE__ */ new Set(); - const refs = /* @__PURE__ */ new Map(); - const symrefs = /* @__PURE__ */ new Map(); - const read = GitPktLine.streamReader(stream); - let lineOne = await read(); - while (lineOne === null) - lineOne = await read(); - if (lineOne === true) - throw new EmptyServerResponseError(); - if (lineOne.includes("version 2")) { - return parseCapabilitiesV2(read); - } - if (lineOne.toString("utf8").replace(/\n$/, "") !== `# service=${service}`) { - throw new ParseError(`# service=${service}\\n`, lineOne.toString("utf8")); - } - let lineTwo = await read(); - while (lineTwo === null) - lineTwo = await read(); - if (lineTwo === true) - return { capabilities, refs, symrefs }; - lineTwo = lineTwo.toString("utf8"); - if (lineTwo.includes("version 2")) { - return parseCapabilitiesV2(read); - } - const [firstRef, capabilitiesLine] = splitAndAssert(lineTwo, "\0", "\\x00"); - capabilitiesLine.split(" ").map((x) => capabilities.add(x)); - const [ref, name] = splitAndAssert(firstRef, " ", " "); - refs.set(name, ref); - while (true) { - const line = await read(); - if (line === true) - break; - if (line !== null) { - const [ref2, name2] = splitAndAssert(line.toString("utf8"), " ", " "); - refs.set(name2, ref2); - } - } - for (const cap of capabilities) { - if (cap.startsWith("symref=")) { - const m = cap.match(/symref=([^:]+):(.*)/); - if (m.length === 3) { - symrefs.set(m[1], m[2]); - } - } - } - return { protocolVersion: 1, capabilities, refs, symrefs }; -} -function splitAndAssert(line, sep2, expected) { - const split = line.trim().split(sep2); - if (split.length !== 2) { - throw new ParseError( - `Two strings separated by '${expected}'`, - line.toString("utf8") - ); - } - return split; -} -var corsProxify = (corsProxy, url) => corsProxy.endsWith("?") ? `${corsProxy}${url}` : `${corsProxy}/${url.replace(/^https?:\/\//, "")}`; -var updateHeaders = (headers, auth) => { - if (auth.username || auth.password) { - headers.Authorization = calculateBasicAuthHeader(auth); - } - if (auth.headers) { - Object.assign(headers, auth.headers); - } -}; -var stringifyBody = async (res) => { - try { - const data = Buffer.from(await collect(res.body)); - const response = data.toString("utf8"); - const preview = response.length < 256 ? response : response.slice(0, 256) + "..."; - return { preview, response, data }; - } catch (e) { - return {}; - } -}; -var GitRemoteHTTP = class { - static async capabilities() { - return ["discover", "connect"]; - } - /** - * @param {Object} args - * @param {HttpClient} args.http - * @param {ProgressCallback} [args.onProgress] - * @param {AuthCallback} [args.onAuth] - * @param {AuthFailureCallback} [args.onAuthFailure] - * @param {AuthSuccessCallback} [args.onAuthSuccess] - * @param {string} [args.corsProxy] - * @param {string} args.service - * @param {string} args.url - * @param {Object} args.headers - * @param {1 | 2} args.protocolVersion - Git Protocol Version - */ - static async discover({ - http, - onProgress, - onAuth, - onAuthSuccess, - onAuthFailure, - corsProxy, - service, - url: _origUrl, - headers, - protocolVersion - }) { - let { url, auth } = extractAuthFromUrl(_origUrl); - const proxifiedURL = corsProxy ? corsProxify(corsProxy, url) : url; - if (auth.username || auth.password) { - headers.Authorization = calculateBasicAuthHeader(auth); - } - if (protocolVersion === 2) { - headers["Git-Protocol"] = "version=2"; - } - let res; - let tryAgain; - let providedAuthBefore = false; - do { - res = await http.request({ - onProgress, - method: "GET", - url: `${proxifiedURL}/info/refs?service=${service}`, - headers - }); - tryAgain = false; - if (res.statusCode === 401 || res.statusCode === 203) { - const getAuth = providedAuthBefore ? onAuthFailure : onAuth; - if (getAuth) { - auth = await getAuth(url, { - ...auth, - headers: { ...headers } - }); - if (auth && auth.cancel) { - throw new UserCanceledError(); - } else if (auth) { - updateHeaders(headers, auth); - providedAuthBefore = true; - tryAgain = true; - } - } - } else if (res.statusCode === 200 && providedAuthBefore && onAuthSuccess) { - await onAuthSuccess(url, auth); - } - } while (tryAgain); - if (res.statusCode !== 200) { - const { response } = await stringifyBody(res); - throw new HttpError(res.statusCode, res.statusMessage, response); - } - if (res.headers["content-type"] === `application/x-${service}-advertisement`) { - const remoteHTTP = await parseRefsAdResponse(res.body, { service }); - remoteHTTP.auth = auth; - return remoteHTTP; - } else { - const { preview, response, data } = await stringifyBody(res); - try { - const remoteHTTP = await parseRefsAdResponse([data], { service }); - remoteHTTP.auth = auth; - return remoteHTTP; - } catch (e) { - throw new SmartHttpError(preview, response); - } - } - } - /** - * @param {Object} args - * @param {HttpClient} args.http - * @param {ProgressCallback} [args.onProgress] - * @param {string} [args.corsProxy] - * @param {string} args.service - * @param {string} args.url - * @param {Object} [args.headers] - * @param {any} args.body - * @param {any} args.auth - */ - static async connect({ - http, - onProgress, - corsProxy, - service, - url, - auth, - body, - headers - }) { - const urlAuth = extractAuthFromUrl(url); - if (urlAuth) - url = urlAuth.url; - if (corsProxy) - url = corsProxify(corsProxy, url); - headers["content-type"] = `application/x-${service}-request`; - headers.accept = `application/x-${service}-result`; - updateHeaders(headers, auth); - const res = await http.request({ - onProgress, - method: "POST", - url: `${url}/${service}`, - body, - headers - }); - if (res.statusCode !== 200) { - const { response } = stringifyBody(res); - throw new HttpError(res.statusCode, res.statusMessage, response); - } - return res; - } -}; -function parseRemoteUrl({ url }) { - if (url.startsWith("git@")) { - return { - transport: "ssh", - address: url - }; - } - const matches = url.match(/(\w+)(:\/\/|::)(.*)/); - if (matches === null) - return; - if (matches[2] === "://") { - return { - transport: matches[1], - address: matches[0] - }; - } - if (matches[2] === "::") { - return { - transport: matches[1], - address: matches[3] - }; - } -} -var GitRemoteManager = class { - static getRemoteHelperFor({ url }) { - const remoteHelpers = /* @__PURE__ */ new Map(); - remoteHelpers.set("http", GitRemoteHTTP); - remoteHelpers.set("https", GitRemoteHTTP); - const parts = parseRemoteUrl({ url }); - if (!parts) { - throw new UrlParseError(url); - } - if (remoteHelpers.has(parts.transport)) { - return remoteHelpers.get(parts.transport); - } - throw new UnknownTransportError( - url, - parts.transport, - parts.transport === "ssh" ? translateSSHtoHTTP(url) : void 0 - ); - } -}; -var lock$1 = null; -var GitShallowManager = class { - static async read({ fs, gitdir }) { - if (lock$1 === null) - lock$1 = new import_async_lock.default(); - const filepath = join(gitdir, "shallow"); - const oids = /* @__PURE__ */ new Set(); - await lock$1.acquire(filepath, async function() { - const text2 = await fs.read(filepath, { encoding: "utf8" }); - if (text2 === null) - return oids; - if (text2.trim() === "") - return oids; - text2.trim().split("\n").map((oid) => oids.add(oid)); - }); - return oids; - } - static async write({ fs, gitdir, oids }) { - if (lock$1 === null) - lock$1 = new import_async_lock.default(); - const filepath = join(gitdir, "shallow"); - if (oids.size > 0) { - const text2 = [...oids].join("\n") + "\n"; - await lock$1.acquire(filepath, async function() { - await fs.write(filepath, text2, { - encoding: "utf8" - }); - }); - } else { - await lock$1.acquire(filepath, async function() { - await fs.rm(filepath); - }); - } - } -}; -async function hasObjectLoose({ fs, gitdir, oid }) { - const source = `objects/${oid.slice(0, 2)}/${oid.slice(2)}`; - return fs.exists(`${gitdir}/${source}`); -} -async function hasObjectPacked({ - fs, - cache, - gitdir, - oid, - getExternalRefDelta -}) { - let list = await fs.readdir(join(gitdir, "objects/pack")); - list = list.filter((x) => x.endsWith(".idx")); - for (const filename of list) { - const indexFile = `${gitdir}/objects/pack/${filename}`; - const p = await readPackIndex({ - fs, - cache, - filename: indexFile, - getExternalRefDelta - }); - if (p.error) - throw new InternalError(p.error); - if (p.offsets.has(oid)) { - return true; - } - } - return false; -} -async function hasObject({ - fs, - cache, - gitdir, - oid, - format = "content" -}) { - const getExternalRefDelta = (oid2) => _readObject({ fs, cache, gitdir, oid: oid2 }); - let result = await hasObjectLoose({ fs, gitdir, oid }); - if (!result) { - result = await hasObjectPacked({ - fs, - cache, - gitdir, - oid, - getExternalRefDelta - }); - } - return result; -} -function emptyPackfile(pack) { - const pheader = "5041434b"; - const version2 = "00000002"; - const obCount = "00000000"; - const header = pheader + version2 + obCount; - return pack.slice(0, 12).toString("hex") === header; -} -function filterCapabilities(server, client) { - const serverNames = server.map((cap) => cap.split("=", 1)[0]); - return client.filter((cap) => { - const name = cap.split("=", 1)[0]; - return serverNames.includes(name); - }); -} -var pkg = { - name: "isomorphic-git", - version: "1.25.3", - agent: "git/isomorphic-git@1.25.3" -}; -var FIFO = class { - constructor() { - this._queue = []; - } - write(chunk) { - if (this._ended) { - throw Error("You cannot write to a FIFO that has already been ended!"); - } - if (this._waiting) { - const resolve = this._waiting; - this._waiting = null; - resolve({ value: chunk }); - } else { - this._queue.push(chunk); - } - } - end() { - this._ended = true; - if (this._waiting) { - const resolve = this._waiting; - this._waiting = null; - resolve({ done: true }); - } - } - destroy(err) { - this.error = err; - this.end(); - } - async next() { - if (this._queue.length > 0) { - return { value: this._queue.shift() }; - } - if (this._ended) { - return { done: true }; - } - if (this._waiting) { - throw Error( - "You cannot call read until the previous call to read has returned!" - ); - } - return new Promise((resolve) => { - this._waiting = resolve; - }); - } -}; -function findSplit(str) { - const r = str.indexOf("\r"); - const n = str.indexOf("\n"); - if (r === -1 && n === -1) - return -1; - if (r === -1) - return n + 1; - if (n === -1) - return r + 1; - if (n === r + 1) - return n + 1; - return Math.min(r, n) + 1; -} -function splitLines(input) { - const output = new FIFO(); - let tmp = ""; - (async () => { - await forAwait(input, (chunk) => { - chunk = chunk.toString("utf8"); - tmp += chunk; - while (true) { - const i = findSplit(tmp); - if (i === -1) - break; - output.write(tmp.slice(0, i)); - tmp = tmp.slice(i); - } - }); - if (tmp.length > 0) { - output.write(tmp); - } - output.end(); - })(); - return output; -} -var GitSideBand = class { - static demux(input) { - const read = GitPktLine.streamReader(input); - const packetlines = new FIFO(); - const packfile = new FIFO(); - const progress = new FIFO(); - const nextBit = async function() { - const line = await read(); - if (line === null) - return nextBit(); - if (line === true) { - packetlines.end(); - progress.end(); - input.error ? packfile.destroy(input.error) : packfile.end(); - return; - } - switch (line[0]) { - case 1: { - packfile.write(line.slice(1)); - break; - } - case 2: { - progress.write(line.slice(1)); - break; - } - case 3: { - const error = line.slice(1); - progress.write(error); - packetlines.end(); - progress.end(); - packfile.destroy(new Error(error.toString("utf8"))); - return; - } - default: { - packetlines.write(line); - } - } - nextBit(); - }; - nextBit(); - return { - packetlines, - packfile, - progress - }; - } - // static mux ({ - // protocol, // 'side-band' or 'side-band-64k' - // packetlines, - // packfile, - // progress, - // error - // }) { - // const MAX_PACKET_LENGTH = protocol === 'side-band-64k' ? 999 : 65519 - // let output = new PassThrough() - // packetlines.on('data', data => { - // if (data === null) { - // output.write(GitPktLine.flush()) - // } else { - // output.write(GitPktLine.encode(data)) - // } - // }) - // let packfileWasEmpty = true - // let packfileEnded = false - // let progressEnded = false - // let errorEnded = false - // let goodbye = Buffer.concat([ - // GitPktLine.encode(Buffer.from('010A', 'hex')), - // GitPktLine.flush() - // ]) - // packfile - // .on('data', data => { - // packfileWasEmpty = false - // const buffers = splitBuffer(data, MAX_PACKET_LENGTH) - // for (const buffer of buffers) { - // output.write( - // GitPktLine.encode(Buffer.concat([Buffer.from('01', 'hex'), buffer])) - // ) - // } - // }) - // .on('end', () => { - // packfileEnded = true - // if (!packfileWasEmpty) output.write(goodbye) - // if (progressEnded && errorEnded) output.end() - // }) - // progress - // .on('data', data => { - // const buffers = splitBuffer(data, MAX_PACKET_LENGTH) - // for (const buffer of buffers) { - // output.write( - // GitPktLine.encode(Buffer.concat([Buffer.from('02', 'hex'), buffer])) - // ) - // } - // }) - // .on('end', () => { - // progressEnded = true - // if (packfileEnded && errorEnded) output.end() - // }) - // error - // .on('data', data => { - // const buffers = splitBuffer(data, MAX_PACKET_LENGTH) - // for (const buffer of buffers) { - // output.write( - // GitPktLine.encode(Buffer.concat([Buffer.from('03', 'hex'), buffer])) - // ) - // } - // }) - // .on('end', () => { - // errorEnded = true - // if (progressEnded && packfileEnded) output.end() - // }) - // return output - // } -}; -async function parseUploadPackResponse(stream) { - const { packetlines, packfile, progress } = GitSideBand.demux(stream); - const shallows = []; - const unshallows = []; - const acks = []; - let nak = false; - let done = false; - return new Promise((resolve, reject) => { - forAwait(packetlines, (data) => { - const line = data.toString("utf8").trim(); - if (line.startsWith("shallow")) { - const oid = line.slice(-41).trim(); - if (oid.length !== 40) { - reject(new InvalidOidError(oid)); - } - shallows.push(oid); - } else if (line.startsWith("unshallow")) { - const oid = line.slice(-41).trim(); - if (oid.length !== 40) { - reject(new InvalidOidError(oid)); - } - unshallows.push(oid); - } else if (line.startsWith("ACK")) { - const [, oid, status2] = line.split(" "); - acks.push({ oid, status: status2 }); - if (!status2) - done = true; - } else if (line.startsWith("NAK")) { - nak = true; - done = true; - } else { - done = true; - nak = true; - } - if (done) { - stream.error ? reject(stream.error) : resolve({ shallows, unshallows, acks, nak, packfile, progress }); - } - }).finally(() => { - if (!done) { - stream.error ? reject(stream.error) : resolve({ shallows, unshallows, acks, nak, packfile, progress }); - } - }); - }); -} -function writeUploadPackRequest({ - capabilities = [], - wants = [], - haves = [], - shallows = [], - depth = null, - since = null, - exclude = [] -}) { - const packstream = []; - wants = [...new Set(wants)]; - let firstLineCapabilities = ` ${capabilities.join(" ")}`; - for (const oid of wants) { - packstream.push(GitPktLine.encode(`want ${oid}${firstLineCapabilities} -`)); - firstLineCapabilities = ""; - } - for (const oid of shallows) { - packstream.push(GitPktLine.encode(`shallow ${oid} -`)); - } - if (depth !== null) { - packstream.push(GitPktLine.encode(`deepen ${depth} -`)); - } - if (since !== null) { - packstream.push( - GitPktLine.encode(`deepen-since ${Math.floor(since.valueOf() / 1e3)} -`) - ); - } - for (const oid of exclude) { - packstream.push(GitPktLine.encode(`deepen-not ${oid} -`)); - } - packstream.push(GitPktLine.flush()); - for (const oid of haves) { - packstream.push(GitPktLine.encode(`have ${oid} -`)); - } - packstream.push(GitPktLine.encode(`done -`)); - return packstream; -} -async function _fetch({ - fs, - cache, - http, - onProgress, - onMessage, - onAuth, - onAuthSuccess, - onAuthFailure, - gitdir, - ref: _ref, - remoteRef: _remoteRef, - remote: _remote, - url: _url, - corsProxy, - depth = null, - since = null, - exclude = [], - relative: relative2 = false, - tags = false, - singleBranch = false, - headers = {}, - prune = false, - pruneTags = false -}) { - const ref = _ref || await _currentBranch({ fs, gitdir, test: true }); - const config = await GitConfigManager.get({ fs, gitdir }); - const remote = _remote || ref && await config.get(`branch.${ref}.remote`) || "origin"; - const url = _url || await config.get(`remote.${remote}.url`); - if (typeof url === "undefined") { - throw new MissingParameterError("remote OR url"); - } - const remoteRef = _remoteRef || ref && await config.get(`branch.${ref}.merge`) || _ref || "HEAD"; - if (corsProxy === void 0) { - corsProxy = await config.get("http.corsProxy"); - } - const GitRemoteHTTP2 = GitRemoteManager.getRemoteHelperFor({ url }); - const remoteHTTP = await GitRemoteHTTP2.discover({ - http, - onAuth, - onAuthSuccess, - onAuthFailure, - corsProxy, - service: "git-upload-pack", - url, - headers, - protocolVersion: 1 - }); - const auth = remoteHTTP.auth; - const remoteRefs = remoteHTTP.refs; - if (remoteRefs.size === 0) { - return { - defaultBranch: null, - fetchHead: null, - fetchHeadDescription: null - }; - } - if (depth !== null && !remoteHTTP.capabilities.has("shallow")) { - throw new RemoteCapabilityError("shallow", "depth"); - } - if (since !== null && !remoteHTTP.capabilities.has("deepen-since")) { - throw new RemoteCapabilityError("deepen-since", "since"); - } - if (exclude.length > 0 && !remoteHTTP.capabilities.has("deepen-not")) { - throw new RemoteCapabilityError("deepen-not", "exclude"); - } - if (relative2 === true && !remoteHTTP.capabilities.has("deepen-relative")) { - throw new RemoteCapabilityError("deepen-relative", "relative"); - } - const { oid, fullref } = GitRefManager.resolveAgainstMap({ - ref: remoteRef, - map: remoteRefs - }); - for (const remoteRef2 of remoteRefs.keys()) { - if (remoteRef2 === fullref || remoteRef2 === "HEAD" || remoteRef2.startsWith("refs/heads/") || tags && remoteRef2.startsWith("refs/tags/")) { - continue; - } - remoteRefs.delete(remoteRef2); - } - const capabilities = filterCapabilities( - [...remoteHTTP.capabilities], - [ - "multi_ack_detailed", - "no-done", - "side-band-64k", - // Note: I removed 'thin-pack' option since our code doesn't "fatten" packfiles, - // which is necessary for compatibility with git. It was the cause of mysterious - // 'fatal: pack has [x] unresolved deltas' errors that plagued us for some time. - // isomorphic-git is perfectly happy with thin packfiles in .git/objects/pack but - // canonical git it turns out is NOT. - "ofs-delta", - `agent=${pkg.agent}` - ] - ); - if (relative2) - capabilities.push("deepen-relative"); - const wants = singleBranch ? [oid] : remoteRefs.values(); - const haveRefs = singleBranch ? [ref] : await GitRefManager.listRefs({ - fs, - gitdir, - filepath: `refs` - }); - let haves = []; - for (let ref2 of haveRefs) { - try { - ref2 = await GitRefManager.expand({ fs, gitdir, ref: ref2 }); - const oid2 = await GitRefManager.resolve({ fs, gitdir, ref: ref2 }); - if (await hasObject({ fs, cache, gitdir, oid: oid2 })) { - haves.push(oid2); - } - } catch (err) { - } - } - haves = [...new Set(haves)]; - const oids = await GitShallowManager.read({ fs, gitdir }); - const shallows = remoteHTTP.capabilities.has("shallow") ? [...oids] : []; - const packstream = writeUploadPackRequest({ - capabilities, - wants, - haves, - shallows, - depth, - since, - exclude - }); - const packbuffer = Buffer.from(await collect(packstream)); - const raw = await GitRemoteHTTP2.connect({ - http, - onProgress, - corsProxy, - service: "git-upload-pack", - url, - auth, - body: [packbuffer], - headers - }); - const response = await parseUploadPackResponse(raw.body); - if (raw.headers) { - response.headers = raw.headers; - } - for (const oid2 of response.shallows) { - if (!oids.has(oid2)) { - try { - const { object } = await _readObject({ fs, cache, gitdir, oid: oid2 }); - const commit2 = new GitCommit(object); - const hasParents = await Promise.all( - commit2.headers().parent.map((oid3) => hasObject({ fs, cache, gitdir, oid: oid3 })) - ); - const haveAllParents = hasParents.length === 0 || hasParents.every((has) => has); - if (!haveAllParents) { - oids.add(oid2); - } - } catch (err) { - oids.add(oid2); - } - } - } - for (const oid2 of response.unshallows) { - oids.delete(oid2); - } - await GitShallowManager.write({ fs, gitdir, oids }); - if (singleBranch) { - const refs = /* @__PURE__ */ new Map([[fullref, oid]]); - const symrefs = /* @__PURE__ */ new Map(); - let bail = 10; - let key2 = fullref; - while (bail--) { - const value = remoteHTTP.symrefs.get(key2); - if (value === void 0) - break; - symrefs.set(key2, value); - key2 = value; - } - const realRef = remoteRefs.get(key2); - if (realRef) { - refs.set(key2, realRef); - } - const { pruned } = await GitRefManager.updateRemoteRefs({ - fs, - gitdir, - remote, - refs, - symrefs, - tags, - prune - }); - if (prune) { - response.pruned = pruned; - } - } else { - const { pruned } = await GitRefManager.updateRemoteRefs({ - fs, - gitdir, - remote, - refs: remoteRefs, - symrefs: remoteHTTP.symrefs, - tags, - prune, - pruneTags - }); - if (prune) { - response.pruned = pruned; - } - } - response.HEAD = remoteHTTP.symrefs.get("HEAD"); - if (response.HEAD === void 0) { - const { oid: oid2 } = GitRefManager.resolveAgainstMap({ - ref: "HEAD", - map: remoteRefs - }); - for (const [key2, value] of remoteRefs.entries()) { - if (key2 !== "HEAD" && value === oid2) { - response.HEAD = key2; - break; - } - } - } - const noun = fullref.startsWith("refs/tags") ? "tag" : "branch"; - response.FETCH_HEAD = { - oid, - description: `${noun} '${abbreviateRef(fullref)}' of ${url}` - }; - if (onProgress || onMessage) { - const lines = splitLines(response.progress); - forAwait(lines, async (line) => { - if (onMessage) - await onMessage(line); - if (onProgress) { - const matches = line.match(/([^:]*).*\((\d+?)\/(\d+?)\)/); - if (matches) { - await onProgress({ - phase: matches[1].trim(), - loaded: parseInt(matches[2], 10), - total: parseInt(matches[3], 10) - }); - } - } - }); - } - const packfile = Buffer.from(await collect(response.packfile)); - if (raw.body.error) - throw raw.body.error; - const packfileSha = packfile.slice(-20).toString("hex"); - const res = { - defaultBranch: response.HEAD, - fetchHead: response.FETCH_HEAD.oid, - fetchHeadDescription: response.FETCH_HEAD.description - }; - if (response.headers) { - res.headers = response.headers; - } - if (prune) { - res.pruned = response.pruned; - } - if (packfileSha !== "" && !emptyPackfile(packfile)) { - res.packfile = `objects/pack/pack-${packfileSha}.pack`; - const fullpath = join(gitdir, res.packfile); - await fs.write(fullpath, packfile); - const getExternalRefDelta = (oid2) => _readObject({ fs, cache, gitdir, oid: oid2 }); - const idx = await GitPackIndex.fromPack({ - pack: packfile, - getExternalRefDelta, - onProgress - }); - await fs.write(fullpath.replace(/\.pack$/, ".idx"), await idx.toBuffer()); - } - return res; -} -async function _init({ - fs, - bare = false, - dir, - gitdir = bare ? dir : join(dir, ".git"), - defaultBranch = "master" -}) { - if (await fs.exists(gitdir + "/config")) - return; - let folders = [ - "hooks", - "info", - "objects/info", - "objects/pack", - "refs/heads", - "refs/tags" - ]; - folders = folders.map((dir2) => gitdir + "/" + dir2); - for (const folder of folders) { - await fs.mkdir(folder); - } - await fs.write( - gitdir + "/config", - `[core] - repositoryformatversion = 0 - filemode = false - bare = ${bare} -` + (bare ? "" : " logallrefupdates = true\n") + " symlinks = false\n ignorecase = true\n" - ); - await fs.write(gitdir + "/HEAD", `ref: refs/heads/${defaultBranch} -`); -} -async function _clone({ - fs, - cache, - http, - onProgress, - onMessage, - onAuth, - onAuthSuccess, - onAuthFailure, - dir, - gitdir, - url, - corsProxy, - ref, - remote, - depth, - since, - exclude, - relative: relative2, - singleBranch, - noCheckout, - noTags, - headers -}) { - try { - await _init({ fs, gitdir }); - await _addRemote({ fs, gitdir, remote, url, force: false }); - if (corsProxy) { - const config = await GitConfigManager.get({ fs, gitdir }); - await config.set(`http.corsProxy`, corsProxy); - await GitConfigManager.save({ fs, gitdir, config }); - } - const { defaultBranch, fetchHead } = await _fetch({ - fs, - cache, - http, - onProgress, - onMessage, - onAuth, - onAuthSuccess, - onAuthFailure, - gitdir, - ref, - remote, - corsProxy, - depth, - since, - exclude, - relative: relative2, - singleBranch, - headers, - tags: !noTags - }); - if (fetchHead === null) - return; - ref = ref || defaultBranch; - ref = ref.replace("refs/heads/", ""); - await _checkout({ - fs, - cache, - onProgress, - dir, - gitdir, - ref, - remote, - noCheckout - }); - } catch (err) { - await fs.rmdir(gitdir, { recursive: true, maxRetries: 10 }).catch(() => void 0); - throw err; - } -} -async function clone({ - fs, - http, - onProgress, - onMessage, - onAuth, - onAuthSuccess, - onAuthFailure, - dir, - gitdir = join(dir, ".git"), - url, - corsProxy = void 0, - ref = void 0, - remote = "origin", - depth = void 0, - since = void 0, - exclude = [], - relative: relative2 = false, - singleBranch = false, - noCheckout = false, - noTags = false, - headers = {}, - cache = {} -}) { - try { - assertParameter("fs", fs); - assertParameter("http", http); - assertParameter("gitdir", gitdir); - if (!noCheckout) { - assertParameter("dir", dir); - } - assertParameter("url", url); - return await _clone({ - fs: new FileSystem(fs), - cache, - http, - onProgress, - onMessage, - onAuth, - onAuthSuccess, - onAuthFailure, - dir, - gitdir, - url, - corsProxy, - ref, - remote, - depth, - since, - exclude, - relative: relative2, - singleBranch, - noCheckout, - noTags, - headers - }); - } catch (err) { - err.caller = "git.clone"; - throw err; - } -} -async function commit({ - fs: _fs, - onSign, - dir, - gitdir = join(dir, ".git"), - message, - author: _author, - committer: _committer, - signingKey, - dryRun = false, - noUpdateBranch = false, - ref, - parent, - tree, - cache = {} -}) { - try { - assertParameter("fs", _fs); - assertParameter("message", message); - if (signingKey) { - assertParameter("onSign", onSign); - } - const fs = new FileSystem(_fs); - const author = await normalizeAuthorObject({ fs, gitdir, author: _author }); - if (!author) - throw new MissingNameError("author"); - const committer = await normalizeCommitterObject({ - fs, - gitdir, - author, - committer: _committer - }); - if (!committer) - throw new MissingNameError("committer"); - return await _commit({ - fs, - cache, - onSign, - gitdir, - message, - author, - committer, - signingKey, - dryRun, - noUpdateBranch, - ref, - parent, - tree - }); - } catch (err) { - err.caller = "git.commit"; - throw err; - } -} -async function currentBranch({ - fs, - dir, - gitdir = join(dir, ".git"), - fullname = false, - test = false -}) { - try { - assertParameter("fs", fs); - assertParameter("gitdir", gitdir); - return await _currentBranch({ - fs: new FileSystem(fs), - gitdir, - fullname, - test - }); - } catch (err) { - err.caller = "git.currentBranch"; - throw err; - } -} -async function _deleteBranch({ fs, gitdir, ref }) { - ref = ref.startsWith("refs/heads/") ? ref : `refs/heads/${ref}`; - const exist = await GitRefManager.exists({ fs, gitdir, ref }); - if (!exist) { - throw new NotFoundError(ref); - } - const fullRef = await GitRefManager.expand({ fs, gitdir, ref }); - const currentRef = await _currentBranch({ fs, gitdir, fullname: true }); - if (fullRef === currentRef) { - const value = await GitRefManager.resolve({ fs, gitdir, ref: fullRef }); - await GitRefManager.writeRef({ fs, gitdir, ref: "HEAD", value }); - } - await GitRefManager.deleteRef({ fs, gitdir, ref: fullRef }); -} -async function deleteBranch({ - fs, - dir, - gitdir = join(dir, ".git"), - ref -}) { - try { - assertParameter("fs", fs); - assertParameter("ref", ref); - return await _deleteBranch({ - fs: new FileSystem(fs), - gitdir, - ref - }); - } catch (err) { - err.caller = "git.deleteBranch"; - throw err; - } -} -async function deleteRef({ fs, dir, gitdir = join(dir, ".git"), ref }) { - try { - assertParameter("fs", fs); - assertParameter("ref", ref); - await GitRefManager.deleteRef({ fs: new FileSystem(fs), gitdir, ref }); - } catch (err) { - err.caller = "git.deleteRef"; - throw err; - } -} -async function _deleteRemote({ fs, gitdir, remote }) { - const config = await GitConfigManager.get({ fs, gitdir }); - await config.deleteSection("remote", remote); - await GitConfigManager.save({ fs, gitdir, config }); -} -async function deleteRemote({ - fs, - dir, - gitdir = join(dir, ".git"), - remote -}) { - try { - assertParameter("fs", fs); - assertParameter("remote", remote); - return await _deleteRemote({ - fs: new FileSystem(fs), - gitdir, - remote - }); - } catch (err) { - err.caller = "git.deleteRemote"; - throw err; - } -} -async function _deleteTag({ fs, gitdir, ref }) { - ref = ref.startsWith("refs/tags/") ? ref : `refs/tags/${ref}`; - await GitRefManager.deleteRef({ fs, gitdir, ref }); -} -async function deleteTag({ fs, dir, gitdir = join(dir, ".git"), ref }) { - try { - assertParameter("fs", fs); - assertParameter("ref", ref); - return await _deleteTag({ - fs: new FileSystem(fs), - gitdir, - ref - }); - } catch (err) { - err.caller = "git.deleteTag"; - throw err; - } -} -async function expandOidLoose({ fs, gitdir, oid: short }) { - const prefix = short.slice(0, 2); - const objectsSuffixes = await fs.readdir(`${gitdir}/objects/${prefix}`); - return objectsSuffixes.map((suffix) => `${prefix}${suffix}`).filter((_oid) => _oid.startsWith(short)); -} -async function expandOidPacked({ - fs, - cache, - gitdir, - oid: short, - getExternalRefDelta -}) { - const results = []; - let list = await fs.readdir(join(gitdir, "objects/pack")); - list = list.filter((x) => x.endsWith(".idx")); - for (const filename of list) { - const indexFile = `${gitdir}/objects/pack/${filename}`; - const p = await readPackIndex({ - fs, - cache, - filename: indexFile, - getExternalRefDelta - }); - if (p.error) - throw new InternalError(p.error); - for (const oid of p.offsets.keys()) { - if (oid.startsWith(short)) - results.push(oid); - } - } - return results; -} -async function _expandOid({ fs, cache, gitdir, oid: short }) { - const getExternalRefDelta = (oid) => _readObject({ fs, cache, gitdir, oid }); - const results = await expandOidLoose({ fs, gitdir, oid: short }); - const packedOids = await expandOidPacked({ - fs, - cache, - gitdir, - oid: short, - getExternalRefDelta - }); - for (const packedOid of packedOids) { - if (results.indexOf(packedOid) === -1) { - results.push(packedOid); - } - } - if (results.length === 1) { - return results[0]; - } - if (results.length > 1) { - throw new AmbiguousError("oids", short, results); - } - throw new NotFoundError(`an object matching "${short}"`); -} -async function expandOid({ - fs, - dir, - gitdir = join(dir, ".git"), - oid, - cache = {} -}) { - try { - assertParameter("fs", fs); - assertParameter("gitdir", gitdir); - assertParameter("oid", oid); - return await _expandOid({ - fs: new FileSystem(fs), - cache, - gitdir, - oid - }); - } catch (err) { - err.caller = "git.expandOid"; - throw err; - } -} -async function expandRef({ fs, dir, gitdir = join(dir, ".git"), ref }) { - try { - assertParameter("fs", fs); - assertParameter("gitdir", gitdir); - assertParameter("ref", ref); - return await GitRefManager.expand({ - fs: new FileSystem(fs), - gitdir, - ref - }); - } catch (err) { - err.caller = "git.expandRef"; - throw err; - } -} -async function _findMergeBase({ fs, cache, gitdir, oids }) { - const visits = {}; - const passes = oids.length; - let heads = oids.map((oid, index2) => ({ index: index2, oid })); - while (heads.length) { - const result = /* @__PURE__ */ new Set(); - for (const { oid, index: index2 } of heads) { - if (!visits[oid]) - visits[oid] = /* @__PURE__ */ new Set(); - visits[oid].add(index2); - if (visits[oid].size === passes) { - result.add(oid); - } - } - if (result.size > 0) { - return [...result]; - } - const newheads = /* @__PURE__ */ new Map(); - for (const { oid, index: index2 } of heads) { - try { - const { object } = await _readObject({ fs, cache, gitdir, oid }); - const commit2 = GitCommit.from(object); - const { parent } = commit2.parseHeaders(); - for (const oid2 of parent) { - if (!visits[oid2] || !visits[oid2].has(index2)) { - newheads.set(oid2 + ":" + index2, { oid: oid2, index: index2 }); - } - } - } catch (err) { - } - } - heads = Array.from(newheads.values()); - } - return []; -} -var LINEBREAKS = /^.*(\r?\n|$)/gm; -function mergeFile({ branches, contents }) { - const ourName = branches[1]; - const theirName = branches[2]; - const baseContent = contents[0]; - const ourContent = contents[1]; - const theirContent = contents[2]; - const ours = ourContent.match(LINEBREAKS); - const base = baseContent.match(LINEBREAKS); - const theirs = theirContent.match(LINEBREAKS); - const result = (0, import_diff3.default)(ours, base, theirs); - const markerSize = 7; - let mergedText = ""; - let cleanMerge = true; - for (const item of result) { - if (item.ok) { - mergedText += item.ok.join(""); - } - if (item.conflict) { - cleanMerge = false; - mergedText += `${"<".repeat(markerSize)} ${ourName} -`; - mergedText += item.conflict.a.join(""); - mergedText += `${"=".repeat(markerSize)} -`; - mergedText += item.conflict.b.join(""); - mergedText += `${">".repeat(markerSize)} ${theirName} -`; - } - } - return { cleanMerge, mergedText }; -} -async function mergeTree({ - fs, - cache, - dir, - gitdir = join(dir, ".git"), - index: index2, - ourOid, - baseOid, - theirOid, - ourName = "ours", - baseName = "base", - theirName = "theirs", - dryRun = false, - abortOnConflict = true, - mergeDriver -}) { - const ourTree = TREE({ ref: ourOid }); - const baseTree = TREE({ ref: baseOid }); - const theirTree = TREE({ ref: theirOid }); - const unmergedFiles = []; - const bothModified = []; - const deleteByUs = []; - const deleteByTheirs = []; - const results = await _walk({ - fs, - cache, - dir, - gitdir, - trees: [ourTree, baseTree, theirTree], - map: async function(filepath, [ours, base, theirs]) { - const path2 = basename(filepath); - const ourChange = await modified(ours, base); - const theirChange = await modified(theirs, base); - switch (`${ourChange}-${theirChange}`) { - case "false-false": { - return { - mode: await base.mode(), - path: path2, - oid: await base.oid(), - type: await base.type() - }; - } - case "false-true": { - return theirs ? { - mode: await theirs.mode(), - path: path2, - oid: await theirs.oid(), - type: await theirs.type() - } : void 0; - } - case "true-false": { - return ours ? { - mode: await ours.mode(), - path: path2, - oid: await ours.oid(), - type: await ours.type() - } : void 0; - } - case "true-true": { - if (ours && base && theirs && await ours.type() === "blob" && await base.type() === "blob" && await theirs.type() === "blob") { - return mergeBlobs({ - fs, - gitdir, - path: path2, - ours, - base, - theirs, - ourName, - baseName, - theirName, - mergeDriver - }).then(async (r) => { - if (!r.cleanMerge) { - unmergedFiles.push(filepath); - bothModified.push(filepath); - if (!abortOnConflict) { - const baseOid2 = await base.oid(); - const ourOid2 = await ours.oid(); - const theirOid2 = await theirs.oid(); - index2.delete({ filepath }); - index2.insert({ filepath, oid: baseOid2, stage: 1 }); - index2.insert({ filepath, oid: ourOid2, stage: 2 }); - index2.insert({ filepath, oid: theirOid2, stage: 3 }); - } - } else if (!abortOnConflict) { - index2.insert({ filepath, oid: r.mergeResult.oid, stage: 0 }); - } - return r.mergeResult; - }); - } - if (base && !ours && theirs && await base.type() === "blob" && await theirs.type() === "blob") { - unmergedFiles.push(filepath); - deleteByUs.push(filepath); - if (!abortOnConflict) { - const baseOid2 = await base.oid(); - const theirOid2 = await theirs.oid(); - index2.delete({ filepath }); - index2.insert({ filepath, oid: baseOid2, stage: 1 }); - index2.insert({ filepath, oid: theirOid2, stage: 3 }); - } - return { - mode: await theirs.mode(), - oid: await theirs.oid(), - type: "blob", - path: path2 - }; - } - if (base && ours && !theirs && await base.type() === "blob" && await ours.type() === "blob") { - unmergedFiles.push(filepath); - deleteByTheirs.push(filepath); - if (!abortOnConflict) { - const baseOid2 = await base.oid(); - const ourOid2 = await ours.oid(); - index2.delete({ filepath }); - index2.insert({ filepath, oid: baseOid2, stage: 1 }); - index2.insert({ filepath, oid: ourOid2, stage: 2 }); - } - return { - mode: await ours.mode(), - oid: await ours.oid(), - type: "blob", - path: path2 - }; - } - if (base && !ours && !theirs && await base.type() === "blob") { - return void 0; - } - throw new MergeNotSupportedError(); - } - } - }, - /** - * @param {TreeEntry} [parent] - * @param {Array} children - */ - reduce: unmergedFiles.length !== 0 && (!dir || abortOnConflict) ? void 0 : async (parent, children2) => { - const entries = children2.filter(Boolean); - if (!parent) - return; - if (parent && parent.type === "tree" && entries.length === 0) - return; - if (entries.length > 0) { - const tree = new GitTree(entries); - const object = tree.toObject(); - const oid = await _writeObject({ - fs, - gitdir, - type: "tree", - object, - dryRun - }); - parent.oid = oid; - } - return parent; - } - }); - if (unmergedFiles.length !== 0) { - if (dir && !abortOnConflict) { - await _walk({ - fs, - cache, - dir, - gitdir, - trees: [TREE({ ref: results.oid })], - map: async function(filepath, [entry]) { - const path2 = `${dir}/${filepath}`; - if (await entry.type() === "blob") { - const mode = await entry.mode(); - const content = new TextDecoder().decode(await entry.content()); - await fs.write(path2, content, { mode }); - } - return true; - } - }); - } - return new MergeConflictError( - unmergedFiles, - bothModified, - deleteByUs, - deleteByTheirs - ); - } - return results.oid; -} -async function mergeBlobs({ - fs, - gitdir, - path: path2, - ours, - base, - theirs, - ourName, - theirName, - baseName, - dryRun, - mergeDriver = mergeFile -}) { - const type = "blob"; - const mode = await base.mode() === await ours.mode() ? await theirs.mode() : await ours.mode(); - if (await ours.oid() === await theirs.oid()) { - return { - cleanMerge: true, - mergeResult: { mode, path: path2, oid: await ours.oid(), type } - }; - } - if (await ours.oid() === await base.oid()) { - return { - cleanMerge: true, - mergeResult: { mode, path: path2, oid: await theirs.oid(), type } - }; - } - if (await theirs.oid() === await base.oid()) { - return { - cleanMerge: true, - mergeResult: { mode, path: path2, oid: await ours.oid(), type } - }; - } - const ourContent = Buffer.from(await ours.content()).toString("utf8"); - const baseContent = Buffer.from(await base.content()).toString("utf8"); - const theirContent = Buffer.from(await theirs.content()).toString("utf8"); - const { mergedText, cleanMerge } = await mergeDriver({ - branches: [baseName, ourName, theirName], - contents: [baseContent, ourContent, theirContent], - path: path2 - }); - const oid = await _writeObject({ - fs, - gitdir, - type: "blob", - object: Buffer.from(mergedText, "utf8"), - dryRun - }); - return { cleanMerge, mergeResult: { mode, path: path2, oid, type } }; -} -async function _merge({ - fs, - cache, - dir, - gitdir, - ours, - theirs, - fastForward: fastForward2 = true, - fastForwardOnly = false, - dryRun = false, - noUpdateBranch = false, - abortOnConflict = true, - message, - author, - committer, - signingKey, - onSign, - mergeDriver -}) { - if (ours === void 0) { - ours = await _currentBranch({ fs, gitdir, fullname: true }); - } - ours = await GitRefManager.expand({ - fs, - gitdir, - ref: ours - }); - theirs = await GitRefManager.expand({ - fs, - gitdir, - ref: theirs - }); - const ourOid = await GitRefManager.resolve({ - fs, - gitdir, - ref: ours - }); - const theirOid = await GitRefManager.resolve({ - fs, - gitdir, - ref: theirs - }); - const baseOids = await _findMergeBase({ - fs, - cache, - gitdir, - oids: [ourOid, theirOid] - }); - if (baseOids.length !== 1) { - throw new MergeNotSupportedError(); - } - const baseOid = baseOids[0]; - if (baseOid === theirOid) { - return { - oid: ourOid, - alreadyMerged: true - }; - } - if (fastForward2 && baseOid === ourOid) { - if (!dryRun && !noUpdateBranch) { - await GitRefManager.writeRef({ fs, gitdir, ref: ours, value: theirOid }); - } - return { - oid: theirOid, - fastForward: true - }; - } else { - if (fastForwardOnly) { - throw new FastForwardError(); - } - const tree = await GitIndexManager.acquire( - { fs, gitdir, cache, allowUnmerged: false }, - async (index2) => { - return mergeTree({ - fs, - cache, - dir, - gitdir, - index: index2, - ourOid, - theirOid, - baseOid, - ourName: abbreviateRef(ours), - baseName: "base", - theirName: abbreviateRef(theirs), - dryRun, - abortOnConflict, - mergeDriver - }); - } - ); - if (tree instanceof MergeConflictError) - throw tree; - if (!message) { - message = `Merge branch '${abbreviateRef(theirs)}' into ${abbreviateRef( - ours - )}`; - } - const oid = await _commit({ - fs, - cache, - gitdir, - message, - ref: ours, - tree, - parent: [ourOid, theirOid], - author, - committer, - signingKey, - onSign, - dryRun, - noUpdateBranch - }); - return { - oid, - tree, - mergeCommit: true - }; - } -} -async function _pull({ - fs, - cache, - http, - onProgress, - onMessage, - onAuth, - onAuthSuccess, - onAuthFailure, - dir, - gitdir, - ref, - url, - remote, - remoteRef, - prune, - pruneTags, - fastForward: fastForward2, - fastForwardOnly, - corsProxy, - singleBranch, - headers, - author, - committer, - signingKey -}) { - try { - if (!ref) { - const head = await _currentBranch({ fs, gitdir }); - if (!head) { - throw new MissingParameterError("ref"); - } - ref = head; - } - const { fetchHead, fetchHeadDescription } = await _fetch({ - fs, - cache, - http, - onProgress, - onMessage, - onAuth, - onAuthSuccess, - onAuthFailure, - gitdir, - corsProxy, - ref, - url, - remote, - remoteRef, - singleBranch, - headers, - prune, - pruneTags - }); - await _merge({ - fs, - cache, - gitdir, - ours: ref, - theirs: fetchHead, - fastForward: fastForward2, - fastForwardOnly, - message: `Merge ${fetchHeadDescription}`, - author, - committer, - signingKey, - dryRun: false, - noUpdateBranch: false - }); - await _checkout({ - fs, - cache, - onProgress, - dir, - gitdir, - ref, - remote, - noCheckout: false - }); - } catch (err) { - err.caller = "git.pull"; - throw err; - } -} -async function fastForward({ - fs, - http, - onProgress, - onMessage, - onAuth, - onAuthSuccess, - onAuthFailure, - dir, - gitdir = join(dir, ".git"), - ref, - url, - remote, - remoteRef, - corsProxy, - singleBranch, - headers = {}, - cache = {} -}) { - try { - assertParameter("fs", fs); - assertParameter("http", http); - assertParameter("gitdir", gitdir); - const thisWillNotBeUsed = { - name: "", - email: "", - timestamp: Date.now(), - timezoneOffset: 0 - }; - return await _pull({ - fs: new FileSystem(fs), - cache, - http, - onProgress, - onMessage, - onAuth, - onAuthSuccess, - onAuthFailure, - dir, - gitdir, - ref, - url, - remote, - remoteRef, - fastForwardOnly: true, - corsProxy, - singleBranch, - headers, - author: thisWillNotBeUsed, - committer: thisWillNotBeUsed - }); - } catch (err) { - err.caller = "git.fastForward"; - throw err; - } -} -async function fetch({ - fs, - http, - onProgress, - onMessage, - onAuth, - onAuthSuccess, - onAuthFailure, - dir, - gitdir = join(dir, ".git"), - ref, - remote, - remoteRef, - url, - corsProxy, - depth = null, - since = null, - exclude = [], - relative: relative2 = false, - tags = false, - singleBranch = false, - headers = {}, - prune = false, - pruneTags = false, - cache = {} -}) { - try { - assertParameter("fs", fs); - assertParameter("http", http); - assertParameter("gitdir", gitdir); - return await _fetch({ - fs: new FileSystem(fs), - cache, - http, - onProgress, - onMessage, - onAuth, - onAuthSuccess, - onAuthFailure, - gitdir, - ref, - remote, - remoteRef, - url, - corsProxy, - depth, - since, - exclude, - relative: relative2, - tags, - singleBranch, - headers, - prune, - pruneTags - }); - } catch (err) { - err.caller = "git.fetch"; - throw err; - } -} -async function findMergeBase({ - fs, - dir, - gitdir = join(dir, ".git"), - oids, - cache = {} -}) { - try { - assertParameter("fs", fs); - assertParameter("gitdir", gitdir); - assertParameter("oids", oids); - return await _findMergeBase({ - fs: new FileSystem(fs), - cache, - gitdir, - oids - }); - } catch (err) { - err.caller = "git.findMergeBase"; - throw err; - } -} -async function _findRoot({ fs, filepath }) { - if (await fs.exists(join(filepath, ".git"))) { - return filepath; - } else { - const parent = dirname(filepath); - if (parent === filepath) { - throw new NotFoundError(`git root for ${filepath}`); - } - return _findRoot({ fs, filepath: parent }); - } -} -async function findRoot({ fs, filepath }) { - try { - assertParameter("fs", fs); - assertParameter("filepath", filepath); - return await _findRoot({ fs: new FileSystem(fs), filepath }); - } catch (err) { - err.caller = "git.findRoot"; - throw err; - } -} -async function getConfig({ fs, dir, gitdir = join(dir, ".git"), path: path2 }) { - try { - assertParameter("fs", fs); - assertParameter("gitdir", gitdir); - assertParameter("path", path2); - return await _getConfig({ - fs: new FileSystem(fs), - gitdir, - path: path2 - }); - } catch (err) { - err.caller = "git.getConfig"; - throw err; - } -} -async function _getConfigAll({ fs, gitdir, path: path2 }) { - const config = await GitConfigManager.get({ fs, gitdir }); - return config.getall(path2); -} -async function getConfigAll({ - fs, - dir, - gitdir = join(dir, ".git"), - path: path2 -}) { - try { - assertParameter("fs", fs); - assertParameter("gitdir", gitdir); - assertParameter("path", path2); - return await _getConfigAll({ - fs: new FileSystem(fs), - gitdir, - path: path2 - }); - } catch (err) { - err.caller = "git.getConfigAll"; - throw err; - } -} -async function getRemoteInfo({ - http, - onAuth, - onAuthSuccess, - onAuthFailure, - corsProxy, - url, - headers = {}, - forPush = false -}) { - try { - assertParameter("http", http); - assertParameter("url", url); - const GitRemoteHTTP2 = GitRemoteManager.getRemoteHelperFor({ url }); - const remote = await GitRemoteHTTP2.discover({ - http, - onAuth, - onAuthSuccess, - onAuthFailure, - corsProxy, - service: forPush ? "git-receive-pack" : "git-upload-pack", - url, - headers, - protocolVersion: 1 - }); - const result = { - capabilities: [...remote.capabilities] - }; - for (const [ref, oid] of remote.refs) { - const parts = ref.split("/"); - const last2 = parts.pop(); - let o = result; - for (const part of parts) { - o[part] = o[part] || {}; - o = o[part]; - } - o[last2] = oid; - } - for (const [symref, ref] of remote.symrefs) { - const parts = symref.split("/"); - const last2 = parts.pop(); - let o = result; - for (const part of parts) { - o[part] = o[part] || {}; - o = o[part]; - } - o[last2] = ref; - } - return result; - } catch (err) { - err.caller = "git.getRemoteInfo"; - throw err; - } -} -function formatInfoRefs(remote, prefix, symrefs, peelTags) { - const refs = []; - for (const [key2, value] of remote.refs) { - if (prefix && !key2.startsWith(prefix)) - continue; - if (key2.endsWith("^{}")) { - if (peelTags) { - const _key = key2.replace("^{}", ""); - const last2 = refs[refs.length - 1]; - const r = last2.ref === _key ? last2 : refs.find((x) => x.ref === _key); - if (r === void 0) { - throw new Error("I did not expect this to happen"); - } - r.peeled = value; - } - continue; - } - const ref = { ref: key2, oid: value }; - if (symrefs) { - if (remote.symrefs.has(key2)) { - ref.target = remote.symrefs.get(key2); - } - } - refs.push(ref); - } - return refs; -} -async function getRemoteInfo2({ - http, - onAuth, - onAuthSuccess, - onAuthFailure, - corsProxy, - url, - headers = {}, - forPush = false, - protocolVersion = 2 -}) { - try { - assertParameter("http", http); - assertParameter("url", url); - const GitRemoteHTTP2 = GitRemoteManager.getRemoteHelperFor({ url }); - const remote = await GitRemoteHTTP2.discover({ - http, - onAuth, - onAuthSuccess, - onAuthFailure, - corsProxy, - service: forPush ? "git-receive-pack" : "git-upload-pack", - url, - headers, - protocolVersion - }); - if (remote.protocolVersion === 2) { - return { - protocolVersion: remote.protocolVersion, - capabilities: remote.capabilities2 - }; - } - const capabilities = {}; - for (const cap of remote.capabilities) { - const [key2, value] = cap.split("="); - if (value) { - capabilities[key2] = value; - } else { - capabilities[key2] = true; - } - } - return { - protocolVersion: 1, - capabilities, - refs: formatInfoRefs(remote, void 0, true, true) - }; - } catch (err) { - err.caller = "git.getRemoteInfo2"; - throw err; - } -} -async function hashObject({ - type, - object, - format = "content", - oid = void 0 -}) { - if (format !== "deflated") { - if (format !== "wrapped") { - object = GitObject.wrap({ type, object }); - } - oid = await shasum(object); - } - return { oid, object }; -} -async function hashBlob({ object }) { - try { - assertParameter("object", object); - if (typeof object === "string") { - object = Buffer.from(object, "utf8"); - } else { - object = Buffer.from(object); - } - const type = "blob"; - const { oid, object: _object } = await hashObject({ - type: "blob", - format: "content", - object - }); - return { oid, type, object: new Uint8Array(_object), format: "wrapped" }; - } catch (err) { - err.caller = "git.hashBlob"; - throw err; - } -} -async function _indexPack({ - fs, - cache, - onProgress, - dir, - gitdir, - filepath -}) { - try { - filepath = join(dir, filepath); - const pack = await fs.read(filepath); - const getExternalRefDelta = (oid) => _readObject({ fs, cache, gitdir, oid }); - const idx = await GitPackIndex.fromPack({ - pack, - getExternalRefDelta, - onProgress - }); - await fs.write(filepath.replace(/\.pack$/, ".idx"), await idx.toBuffer()); - return { - oids: [...idx.hashes] - }; - } catch (err) { - err.caller = "git.indexPack"; - throw err; - } -} -async function indexPack({ - fs, - onProgress, - dir, - gitdir = join(dir, ".git"), - filepath, - cache = {} -}) { - try { - assertParameter("fs", fs); - assertParameter("dir", dir); - assertParameter("gitdir", dir); - assertParameter("filepath", filepath); - return await _indexPack({ - fs: new FileSystem(fs), - cache, - onProgress, - dir, - gitdir, - filepath - }); - } catch (err) { - err.caller = "git.indexPack"; - throw err; - } -} -async function init({ - fs, - bare = false, - dir, - gitdir = bare ? dir : join(dir, ".git"), - defaultBranch = "master" -}) { - try { - assertParameter("fs", fs); - assertParameter("gitdir", gitdir); - if (!bare) { - assertParameter("dir", dir); - } - return await _init({ - fs: new FileSystem(fs), - bare, - dir, - gitdir, - defaultBranch - }); - } catch (err) { - err.caller = "git.init"; - throw err; - } -} -async function _isDescendent({ - fs, - cache, - gitdir, - oid, - ancestor, - depth -}) { - const shallows = await GitShallowManager.read({ fs, gitdir }); - if (!oid) { - throw new MissingParameterError("oid"); - } - if (!ancestor) { - throw new MissingParameterError("ancestor"); - } - if (oid === ancestor) - return false; - const queue = [oid]; - const visited = /* @__PURE__ */ new Set(); - let searchdepth = 0; - while (queue.length) { - if (searchdepth++ === depth) { - throw new MaxDepthError(depth); - } - const oid2 = queue.shift(); - const { type, object } = await _readObject({ - fs, - cache, - gitdir, - oid: oid2 - }); - if (type !== "commit") { - throw new ObjectTypeError(oid2, type, "commit"); - } - const commit2 = GitCommit.from(object).parse(); - for (const parent of commit2.parent) { - if (parent === ancestor) - return true; - } - if (!shallows.has(oid2)) { - for (const parent of commit2.parent) { - if (!visited.has(parent)) { - queue.push(parent); - visited.add(parent); - } - } - } - } - return false; -} -async function isDescendent({ - fs, - dir, - gitdir = join(dir, ".git"), - oid, - ancestor, - depth = -1, - cache = {} -}) { - try { - assertParameter("fs", fs); - assertParameter("gitdir", gitdir); - assertParameter("oid", oid); - assertParameter("ancestor", ancestor); - return await _isDescendent({ - fs: new FileSystem(fs), - cache, - gitdir, - oid, - ancestor, - depth - }); - } catch (err) { - err.caller = "git.isDescendent"; - throw err; - } -} -async function isIgnored({ - fs, - dir, - gitdir = join(dir, ".git"), - filepath -}) { - try { - assertParameter("fs", fs); - assertParameter("dir", dir); - assertParameter("gitdir", gitdir); - assertParameter("filepath", filepath); - return GitIgnoreManager.isIgnored({ - fs: new FileSystem(fs), - dir, - gitdir, - filepath - }); - } catch (err) { - err.caller = "git.isIgnored"; - throw err; - } -} -async function listBranches({ - fs, - dir, - gitdir = join(dir, ".git"), - remote -}) { - try { - assertParameter("fs", fs); - assertParameter("gitdir", gitdir); - return GitRefManager.listBranches({ - fs: new FileSystem(fs), - gitdir, - remote - }); - } catch (err) { - err.caller = "git.listBranches"; - throw err; - } -} -async function _listFiles({ fs, gitdir, ref, cache }) { - if (ref) { - const oid = await GitRefManager.resolve({ gitdir, fs, ref }); - const filenames = []; - await accumulateFilesFromOid({ - fs, - cache, - gitdir, - oid, - filenames, - prefix: "" - }); - return filenames; - } else { - return GitIndexManager.acquire({ fs, gitdir, cache }, async function(index2) { - return index2.entries.map((x) => x.path); - }); - } -} -async function accumulateFilesFromOid({ - fs, - cache, - gitdir, - oid, - filenames, - prefix -}) { - const { tree } = await _readTree({ fs, cache, gitdir, oid }); - for (const entry of tree) { - if (entry.type === "tree") { - await accumulateFilesFromOid({ - fs, - cache, - gitdir, - oid: entry.oid, - filenames, - prefix: join(prefix, entry.path) - }); - } else { - filenames.push(join(prefix, entry.path)); - } - } -} -async function listFiles({ - fs, - dir, - gitdir = join(dir, ".git"), - ref, - cache = {} -}) { - try { - assertParameter("fs", fs); - assertParameter("gitdir", gitdir); - return await _listFiles({ - fs: new FileSystem(fs), - cache, - gitdir, - ref - }); - } catch (err) { - err.caller = "git.listFiles"; - throw err; - } -} -async function _listNotes({ fs, cache, gitdir, ref }) { - let parent; - try { - parent = await GitRefManager.resolve({ gitdir, fs, ref }); - } catch (err) { - if (err instanceof NotFoundError) { - return []; - } - } - const result = await _readTree({ - fs, - cache, - gitdir, - oid: parent - }); - const notes = result.tree.map((entry) => ({ - target: entry.path, - note: entry.oid - })); - return notes; -} -async function listNotes({ - fs, - dir, - gitdir = join(dir, ".git"), - ref = "refs/notes/commits", - cache = {} -}) { - try { - assertParameter("fs", fs); - assertParameter("gitdir", gitdir); - assertParameter("ref", ref); - return await _listNotes({ - fs: new FileSystem(fs), - cache, - gitdir, - ref - }); - } catch (err) { - err.caller = "git.listNotes"; - throw err; - } -} -async function _listRemotes({ fs, gitdir }) { - const config = await GitConfigManager.get({ fs, gitdir }); - const remoteNames = await config.getSubsections("remote"); - const remotes = Promise.all( - remoteNames.map(async (remote) => { - const url = await config.get(`remote.${remote}.url`); - return { remote, url }; - }) - ); - return remotes; -} -async function listRemotes({ fs, dir, gitdir = join(dir, ".git") }) { - try { - assertParameter("fs", fs); - assertParameter("gitdir", gitdir); - return await _listRemotes({ - fs: new FileSystem(fs), - gitdir - }); - } catch (err) { - err.caller = "git.listRemotes"; - throw err; - } -} -async function parseListRefsResponse(stream) { - const read = GitPktLine.streamReader(stream); - const refs = []; - let line; - while (true) { - line = await read(); - if (line === true) - break; - if (line === null) - continue; - line = line.toString("utf8").replace(/\n$/, ""); - const [oid, ref, ...attrs] = line.split(" "); - const r = { ref, oid }; - for (const attr2 of attrs) { - const [name, value] = attr2.split(":"); - if (name === "symref-target") { - r.target = value; - } else if (name === "peeled") { - r.peeled = value; - } - } - refs.push(r); - } - return refs; -} -async function writeListRefsRequest({ prefix, symrefs, peelTags }) { - const packstream = []; - packstream.push(GitPktLine.encode("command=ls-refs\n")); - packstream.push(GitPktLine.encode(`agent=${pkg.agent} -`)); - if (peelTags || symrefs || prefix) { - packstream.push(GitPktLine.delim()); - } - if (peelTags) - packstream.push(GitPktLine.encode("peel")); - if (symrefs) - packstream.push(GitPktLine.encode("symrefs")); - if (prefix) - packstream.push(GitPktLine.encode(`ref-prefix ${prefix}`)); - packstream.push(GitPktLine.flush()); - return packstream; -} -async function listServerRefs({ - http, - onAuth, - onAuthSuccess, - onAuthFailure, - corsProxy, - url, - headers = {}, - forPush = false, - protocolVersion = 2, - prefix, - symrefs, - peelTags -}) { - try { - assertParameter("http", http); - assertParameter("url", url); - const remote = await GitRemoteHTTP.discover({ - http, - onAuth, - onAuthSuccess, - onAuthFailure, - corsProxy, - service: forPush ? "git-receive-pack" : "git-upload-pack", - url, - headers, - protocolVersion - }); - if (remote.protocolVersion === 1) { - return formatInfoRefs(remote, prefix, symrefs, peelTags); - } - const body = await writeListRefsRequest({ prefix, symrefs, peelTags }); - const res = await GitRemoteHTTP.connect({ - http, - auth: remote.auth, - headers, - corsProxy, - service: forPush ? "git-receive-pack" : "git-upload-pack", - url, - body - }); - return parseListRefsResponse(res.body); - } catch (err) { - err.caller = "git.listServerRefs"; - throw err; - } -} -async function listTags({ fs, dir, gitdir = join(dir, ".git") }) { - try { - assertParameter("fs", fs); - assertParameter("gitdir", gitdir); - return GitRefManager.listTags({ fs: new FileSystem(fs), gitdir }); - } catch (err) { - err.caller = "git.listTags"; - throw err; - } -} -async function resolveCommit({ fs, cache, gitdir, oid }) { - const { type, object } = await _readObject({ fs, cache, gitdir, oid }); - if (type === "tag") { - oid = GitAnnotatedTag.from(object).parse().object; - return resolveCommit({ fs, cache, gitdir, oid }); - } - if (type !== "commit") { - throw new ObjectTypeError(oid, type, "commit"); - } - return { commit: GitCommit.from(object), oid }; -} -async function _readCommit({ fs, cache, gitdir, oid }) { - const { commit: commit2, oid: commitOid } = await resolveCommit({ - fs, - cache, - gitdir, - oid - }); - const result = { - oid: commitOid, - commit: commit2.parse(), - payload: commit2.withoutSignature() - }; - return result; -} -function compareAge(a, b) { - return a.committer.timestamp - b.committer.timestamp; -} -var EMPTY_OID = "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391"; -async function resolveFileIdInTree({ fs, cache, gitdir, oid, fileId }) { - if (fileId === EMPTY_OID) - return; - const _oid = oid; - let filepath; - const result = await resolveTree({ fs, cache, gitdir, oid }); - const tree = result.tree; - if (fileId === result.oid) { - filepath = result.path; - } else { - filepath = await _resolveFileId({ - fs, - cache, - gitdir, - tree, - fileId, - oid: _oid - }); - if (Array.isArray(filepath)) { - if (filepath.length === 0) - filepath = void 0; - else if (filepath.length === 1) - filepath = filepath[0]; - } - } - return filepath; -} -async function _resolveFileId({ - fs, - cache, - gitdir, - tree, - fileId, - oid, - filepaths = [], - parentPath = "" -}) { - const walks = tree.entries().map(function(entry) { - let result; - if (entry.oid === fileId) { - result = join(parentPath, entry.path); - filepaths.push(result); - } else if (entry.type === "tree") { - result = _readObject({ - fs, - cache, - gitdir, - oid: entry.oid - }).then(function({ object }) { - return _resolveFileId({ - fs, - cache, - gitdir, - tree: GitTree.from(object), - fileId, - oid, - filepaths, - parentPath: join(parentPath, entry.path) - }); - }); - } - return result; - }); - await Promise.all(walks); - return filepaths; -} -async function _log({ - fs, - cache, - gitdir, - filepath, - ref, - depth, - since, - force, - follow -}) { - const sinceTimestamp = typeof since === "undefined" ? void 0 : Math.floor(since.valueOf() / 1e3); - const commits = []; - const shallowCommits = await GitShallowManager.read({ fs, gitdir }); - const oid = await GitRefManager.resolve({ fs, gitdir, ref }); - const tips = [await _readCommit({ fs, cache, gitdir, oid })]; - let lastFileOid; - let lastCommit; - let isOk; - function endCommit(commit2) { - if (isOk && filepath) - commits.push(commit2); - } - while (tips.length > 0) { - const commit2 = tips.pop(); - if (sinceTimestamp !== void 0 && commit2.commit.committer.timestamp <= sinceTimestamp) { - break; - } - if (filepath) { - let vFileOid; - try { - vFileOid = await resolveFilepath({ - fs, - cache, - gitdir, - oid: commit2.commit.tree, - filepath - }); - if (lastCommit && lastFileOid !== vFileOid) { - commits.push(lastCommit); - } - lastFileOid = vFileOid; - lastCommit = commit2; - isOk = true; - } catch (e) { - if (e instanceof NotFoundError) { - let found = follow && lastFileOid; - if (found) { - found = await resolveFileIdInTree({ - fs, - cache, - gitdir, - oid: commit2.commit.tree, - fileId: lastFileOid - }); - if (found) { - if (Array.isArray(found)) { - if (lastCommit) { - const lastFound = await resolveFileIdInTree({ - fs, - cache, - gitdir, - oid: lastCommit.commit.tree, - fileId: lastFileOid - }); - if (Array.isArray(lastFound)) { - found = found.filter((p) => lastFound.indexOf(p) === -1); - if (found.length === 1) { - found = found[0]; - filepath = found; - if (lastCommit) - commits.push(lastCommit); - } else { - found = false; - if (lastCommit) - commits.push(lastCommit); - break; - } - } - } - } else { - filepath = found; - if (lastCommit) - commits.push(lastCommit); - } - } - } - if (!found) { - if (isOk && lastFileOid) { - commits.push(lastCommit); - if (!force) - break; - } - if (!force && !follow) - throw e; - } - lastCommit = commit2; - isOk = false; - } else - throw e; - } - } else { - commits.push(commit2); - } - if (depth !== void 0 && commits.length === depth) { - endCommit(commit2); - break; - } - if (!shallowCommits.has(commit2.oid)) { - for (const oid2 of commit2.commit.parent) { - const commit3 = await _readCommit({ fs, cache, gitdir, oid: oid2 }); - if (!tips.map((commit4) => commit4.oid).includes(commit3.oid)) { - tips.push(commit3); - } - } - } - if (tips.length === 0) { - endCommit(commit2); - } - tips.sort((a, b) => compareAge(a.commit, b.commit)); - } - return commits; -} -async function log({ - fs, - dir, - gitdir = join(dir, ".git"), - filepath, - ref = "HEAD", - depth, - since, - // Date - force, - follow, - cache = {} -}) { - try { - assertParameter("fs", fs); - assertParameter("gitdir", gitdir); - assertParameter("ref", ref); - return await _log({ - fs: new FileSystem(fs), - cache, - gitdir, - filepath, - ref, - depth, - since, - force, - follow - }); - } catch (err) { - err.caller = "git.log"; - throw err; - } -} -async function merge({ - fs: _fs, - onSign, - dir, - gitdir = join(dir, ".git"), - ours, - theirs, - fastForward: fastForward2 = true, - fastForwardOnly = false, - dryRun = false, - noUpdateBranch = false, - abortOnConflict = true, - message, - author: _author, - committer: _committer, - signingKey, - cache = {}, - mergeDriver -}) { - try { - assertParameter("fs", _fs); - if (signingKey) { - assertParameter("onSign", onSign); - } - const fs = new FileSystem(_fs); - const author = await normalizeAuthorObject({ fs, gitdir, author: _author }); - if (!author && (!fastForwardOnly || !fastForward2)) { - throw new MissingNameError("author"); - } - const committer = await normalizeCommitterObject({ - fs, - gitdir, - author, - committer: _committer - }); - if (!committer && (!fastForwardOnly || !fastForward2)) { - throw new MissingNameError("committer"); - } - return await _merge({ - fs, - cache, - dir, - gitdir, - ours, - theirs, - fastForward: fastForward2, - fastForwardOnly, - dryRun, - noUpdateBranch, - abortOnConflict, - message, - author, - committer, - signingKey, - onSign, - mergeDriver - }); - } catch (err) { - err.caller = "git.merge"; - throw err; - } -} -var types = { - commit: 16, - tree: 32, - blob: 48, - tag: 64, - ofs_delta: 96, - ref_delta: 112 -}; -async function _pack({ - fs, - cache, - dir, - gitdir = join(dir, ".git"), - oids -}) { - const hash2 = new import_sha1.default(); - const outputStream = []; - function write(chunk, enc) { - const buff = Buffer.from(chunk, enc); - outputStream.push(buff); - hash2.update(buff); - } - async function writeObject2({ stype, object }) { - const type = types[stype]; - let length = object.length; - let multibyte = length > 15 ? 128 : 0; - const lastFour = length & 15; - length = length >>> 4; - let byte = (multibyte | type | lastFour).toString(16); - write(byte, "hex"); - while (multibyte) { - multibyte = length > 127 ? 128 : 0; - byte = multibyte | length & 127; - write(padHex(2, byte), "hex"); - length = length >>> 7; - } - write(Buffer.from(await deflate(object))); - } - write("PACK"); - write("00000002", "hex"); - write(padHex(8, oids.length), "hex"); - for (const oid of oids) { - const { type, object } = await _readObject({ fs, cache, gitdir, oid }); - await writeObject2({ write, object, stype: type }); - } - const digest = hash2.digest(); - outputStream.push(digest); - return outputStream; -} -async function _packObjects({ fs, cache, gitdir, oids, write }) { - const buffers = await _pack({ fs, cache, gitdir, oids }); - const packfile = Buffer.from(await collect(buffers)); - const packfileSha = packfile.slice(-20).toString("hex"); - const filename = `pack-${packfileSha}.pack`; - if (write) { - await fs.write(join(gitdir, `objects/pack/${filename}`), packfile); - return { filename }; - } - return { - filename, - packfile: new Uint8Array(packfile) - }; -} -async function packObjects({ - fs, - dir, - gitdir = join(dir, ".git"), - oids, - write = false, - cache = {} -}) { - try { - assertParameter("fs", fs); - assertParameter("gitdir", gitdir); - assertParameter("oids", oids); - return await _packObjects({ - fs: new FileSystem(fs), - cache, - gitdir, - oids, - write - }); - } catch (err) { - err.caller = "git.packObjects"; - throw err; - } -} -async function pull({ - fs: _fs, - http, - onProgress, - onMessage, - onAuth, - onAuthSuccess, - onAuthFailure, - dir, - gitdir = join(dir, ".git"), - ref, - url, - remote, - remoteRef, - prune = false, - pruneTags = false, - fastForward: fastForward2 = true, - fastForwardOnly = false, - corsProxy, - singleBranch, - headers = {}, - author: _author, - committer: _committer, - signingKey, - cache = {} -}) { - try { - assertParameter("fs", _fs); - assertParameter("gitdir", gitdir); - const fs = new FileSystem(_fs); - const author = await normalizeAuthorObject({ fs, gitdir, author: _author }); - if (!author) - throw new MissingNameError("author"); - const committer = await normalizeCommitterObject({ - fs, - gitdir, - author, - committer: _committer - }); - if (!committer) - throw new MissingNameError("committer"); - return await _pull({ - fs, - cache, - http, - onProgress, - onMessage, - onAuth, - onAuthSuccess, - onAuthFailure, - dir, - gitdir, - ref, - url, - remote, - remoteRef, - fastForward: fastForward2, - fastForwardOnly, - corsProxy, - singleBranch, - headers, - author, - committer, - signingKey, - prune, - pruneTags - }); - } catch (err) { - err.caller = "git.pull"; - throw err; - } -} -async function listCommitsAndTags({ - fs, - cache, - dir, - gitdir = join(dir, ".git"), - start, - finish -}) { - const shallows = await GitShallowManager.read({ fs, gitdir }); - const startingSet = /* @__PURE__ */ new Set(); - const finishingSet = /* @__PURE__ */ new Set(); - for (const ref of start) { - startingSet.add(await GitRefManager.resolve({ fs, gitdir, ref })); - } - for (const ref of finish) { - try { - const oid = await GitRefManager.resolve({ fs, gitdir, ref }); - finishingSet.add(oid); - } catch (err) { - } - } - const visited = /* @__PURE__ */ new Set(); - async function walk2(oid) { - visited.add(oid); - const { type, object } = await _readObject({ fs, cache, gitdir, oid }); - if (type === "tag") { - const tag2 = GitAnnotatedTag.from(object); - const commit2 = tag2.headers().object; - return walk2(commit2); - } - if (type !== "commit") { - throw new ObjectTypeError(oid, type, "commit"); - } - if (!shallows.has(oid)) { - const commit2 = GitCommit.from(object); - const parents = commit2.headers().parent; - for (oid of parents) { - if (!finishingSet.has(oid) && !visited.has(oid)) { - await walk2(oid); - } - } - } - } - for (const oid of startingSet) { - await walk2(oid); - } - return visited; -} -async function listObjects({ - fs, - cache, - dir, - gitdir = join(dir, ".git"), - oids -}) { - const visited = /* @__PURE__ */ new Set(); - async function walk2(oid) { - if (visited.has(oid)) - return; - visited.add(oid); - const { type, object } = await _readObject({ fs, cache, gitdir, oid }); - if (type === "tag") { - const tag2 = GitAnnotatedTag.from(object); - const obj = tag2.headers().object; - await walk2(obj); - } else if (type === "commit") { - const commit2 = GitCommit.from(object); - const tree = commit2.headers().tree; - await walk2(tree); - } else if (type === "tree") { - const tree = GitTree.from(object); - for (const entry of tree) { - if (entry.type === "blob") { - visited.add(entry.oid); - } - if (entry.type === "tree") { - await walk2(entry.oid); - } - } - } - } - for (const oid of oids) { - await walk2(oid); - } - return visited; -} -async function parseReceivePackResponse(packfile) { - const result = {}; - let response = ""; - const read = GitPktLine.streamReader(packfile); - let line = await read(); - while (line !== true) { - if (line !== null) - response += line.toString("utf8") + "\n"; - line = await read(); - } - const lines = response.toString("utf8").split("\n"); - line = lines.shift(); - if (!line.startsWith("unpack ")) { - throw new ParseError('unpack ok" or "unpack [error message]', line); - } - result.ok = line === "unpack ok"; - if (!result.ok) { - result.error = line.slice("unpack ".length); - } - result.refs = {}; - for (const line2 of lines) { - if (line2.trim() === "") - continue; - const status2 = line2.slice(0, 2); - const refAndMessage = line2.slice(3); - let space2 = refAndMessage.indexOf(" "); - if (space2 === -1) - space2 = refAndMessage.length; - const ref = refAndMessage.slice(0, space2); - const error = refAndMessage.slice(space2 + 1); - result.refs[ref] = { - ok: status2 === "ok", - error - }; - } - return result; -} -async function writeReceivePackRequest({ - capabilities = [], - triplets = [] -}) { - const packstream = []; - let capsFirstLine = `\0 ${capabilities.join(" ")}`; - for (const trip of triplets) { - packstream.push( - GitPktLine.encode( - `${trip.oldoid} ${trip.oid} ${trip.fullRef}${capsFirstLine} -` - ) - ); - capsFirstLine = ""; - } - packstream.push(GitPktLine.flush()); - return packstream; -} -async function _push({ - fs, - cache, - http, - onProgress, - onMessage, - onAuth, - onAuthSuccess, - onAuthFailure, - gitdir, - ref: _ref, - remoteRef: _remoteRef, - remote, - url: _url, - force = false, - delete: _delete = false, - corsProxy, - headers = {} -}) { - const ref = _ref || await _currentBranch({ fs, gitdir }); - if (typeof ref === "undefined") { - throw new MissingParameterError("ref"); - } - const config = await GitConfigManager.get({ fs, gitdir }); - remote = remote || await config.get(`branch.${ref}.pushRemote`) || await config.get("remote.pushDefault") || await config.get(`branch.${ref}.remote`) || "origin"; - const url = _url || await config.get(`remote.${remote}.pushurl`) || await config.get(`remote.${remote}.url`); - if (typeof url === "undefined") { - throw new MissingParameterError("remote OR url"); - } - const remoteRef = _remoteRef || await config.get(`branch.${ref}.merge`); - if (typeof url === "undefined") { - throw new MissingParameterError("remoteRef"); - } - if (corsProxy === void 0) { - corsProxy = await config.get("http.corsProxy"); - } - const fullRef = await GitRefManager.expand({ fs, gitdir, ref }); - const oid = _delete ? "0000000000000000000000000000000000000000" : await GitRefManager.resolve({ fs, gitdir, ref: fullRef }); - const GitRemoteHTTP2 = GitRemoteManager.getRemoteHelperFor({ url }); - const httpRemote = await GitRemoteHTTP2.discover({ - http, - onAuth, - onAuthSuccess, - onAuthFailure, - corsProxy, - service: "git-receive-pack", - url, - headers, - protocolVersion: 1 - }); - const auth = httpRemote.auth; - let fullRemoteRef; - if (!remoteRef) { - fullRemoteRef = fullRef; - } else { - try { - fullRemoteRef = await GitRefManager.expandAgainstMap({ - ref: remoteRef, - map: httpRemote.refs - }); - } catch (err) { - if (err instanceof NotFoundError) { - fullRemoteRef = remoteRef.startsWith("refs/") ? remoteRef : `refs/heads/${remoteRef}`; - } else { - throw err; - } - } - } - const oldoid = httpRemote.refs.get(fullRemoteRef) || "0000000000000000000000000000000000000000"; - const thinPack = !httpRemote.capabilities.has("no-thin"); - let objects = /* @__PURE__ */ new Set(); - if (!_delete) { - const finish = [...httpRemote.refs.values()]; - let skipObjects = /* @__PURE__ */ new Set(); - if (oldoid !== "0000000000000000000000000000000000000000") { - const mergebase = await _findMergeBase({ - fs, - cache, - gitdir, - oids: [oid, oldoid] - }); - for (const oid2 of mergebase) - finish.push(oid2); - if (thinPack) { - skipObjects = await listObjects({ fs, cache, gitdir, oids: mergebase }); - } - } - if (!finish.includes(oid)) { - const commits = await listCommitsAndTags({ - fs, - cache, - gitdir, - start: [oid], - finish - }); - objects = await listObjects({ fs, cache, gitdir, oids: commits }); - } - if (thinPack) { - try { - const ref2 = await GitRefManager.resolve({ - fs, - gitdir, - ref: `refs/remotes/${remote}/HEAD`, - depth: 2 - }); - const { oid: oid2 } = await GitRefManager.resolveAgainstMap({ - ref: ref2.replace(`refs/remotes/${remote}/`, ""), - fullref: ref2, - map: httpRemote.refs - }); - const oids = [oid2]; - for (const oid3 of await listObjects({ fs, cache, gitdir, oids })) { - skipObjects.add(oid3); - } - } catch (e) { - } - for (const oid2 of skipObjects) { - objects.delete(oid2); - } - } - if (oid === oldoid) - force = true; - if (!force) { - if (fullRef.startsWith("refs/tags") && oldoid !== "0000000000000000000000000000000000000000") { - throw new PushRejectedError("tag-exists"); - } - if (oid !== "0000000000000000000000000000000000000000" && oldoid !== "0000000000000000000000000000000000000000" && !await _isDescendent({ - fs, - cache, - gitdir, - oid, - ancestor: oldoid, - depth: -1 - })) { - throw new PushRejectedError("not-fast-forward"); - } - } - } - const capabilities = filterCapabilities( - [...httpRemote.capabilities], - ["report-status", "side-band-64k", `agent=${pkg.agent}`] - ); - const packstream1 = await writeReceivePackRequest({ - capabilities, - triplets: [{ oldoid, oid, fullRef: fullRemoteRef }] - }); - const packstream2 = _delete ? [] : await _pack({ - fs, - cache, - gitdir, - oids: [...objects] - }); - const res = await GitRemoteHTTP2.connect({ - http, - onProgress, - corsProxy, - service: "git-receive-pack", - url, - auth, - headers, - body: [...packstream1, ...packstream2] - }); - const { packfile, progress } = await GitSideBand.demux(res.body); - if (onMessage) { - const lines = splitLines(progress); - forAwait(lines, async (line) => { - await onMessage(line); - }); - } - const result = await parseReceivePackResponse(packfile); - if (res.headers) { - result.headers = res.headers; - } - if (remote && result.ok && result.refs[fullRemoteRef].ok) { - const ref2 = `refs/remotes/${remote}/${fullRemoteRef.replace( - "refs/heads", - "" - )}`; - if (_delete) { - await GitRefManager.deleteRef({ fs, gitdir, ref: ref2 }); - } else { - await GitRefManager.writeRef({ fs, gitdir, ref: ref2, value: oid }); - } - } - if (result.ok && Object.values(result.refs).every((result2) => result2.ok)) { - return result; - } else { - const prettyDetails = Object.entries(result.refs).filter(([k, v]) => !v.ok).map(([k, v]) => ` - - ${k}: ${v.error}`).join(""); - throw new GitPushError(prettyDetails, result); - } -} -async function push({ - fs, - http, - onProgress, - onMessage, - onAuth, - onAuthSuccess, - onAuthFailure, - dir, - gitdir = join(dir, ".git"), - ref, - remoteRef, - remote = "origin", - url, - force = false, - delete: _delete = false, - corsProxy, - headers = {}, - cache = {} -}) { - try { - assertParameter("fs", fs); - assertParameter("http", http); - assertParameter("gitdir", gitdir); - return await _push({ - fs: new FileSystem(fs), - cache, - http, - onProgress, - onMessage, - onAuth, - onAuthSuccess, - onAuthFailure, - gitdir, - ref, - remoteRef, - remote, - url, - force, - delete: _delete, - corsProxy, - headers - }); - } catch (err) { - err.caller = "git.push"; - throw err; - } -} -async function resolveBlob({ fs, cache, gitdir, oid }) { - const { type, object } = await _readObject({ fs, cache, gitdir, oid }); - if (type === "tag") { - oid = GitAnnotatedTag.from(object).parse().object; - return resolveBlob({ fs, cache, gitdir, oid }); - } - if (type !== "blob") { - throw new ObjectTypeError(oid, type, "blob"); - } - return { oid, blob: new Uint8Array(object) }; -} -async function _readBlob({ - fs, - cache, - gitdir, - oid, - filepath = void 0 -}) { - if (filepath !== void 0) { - oid = await resolveFilepath({ fs, cache, gitdir, oid, filepath }); - } - const blob = await resolveBlob({ - fs, - cache, - gitdir, - oid - }); - return blob; -} -async function readBlob({ - fs, - dir, - gitdir = join(dir, ".git"), - oid, - filepath, - cache = {} -}) { - try { - assertParameter("fs", fs); - assertParameter("gitdir", gitdir); - assertParameter("oid", oid); - return await _readBlob({ - fs: new FileSystem(fs), - cache, - gitdir, - oid, - filepath - }); - } catch (err) { - err.caller = "git.readBlob"; - throw err; - } -} -async function readCommit({ - fs, - dir, - gitdir = join(dir, ".git"), - oid, - cache = {} -}) { - try { - assertParameter("fs", fs); - assertParameter("gitdir", gitdir); - assertParameter("oid", oid); - return await _readCommit({ - fs: new FileSystem(fs), - cache, - gitdir, - oid - }); - } catch (err) { - err.caller = "git.readCommit"; - throw err; - } -} -async function _readNote({ - fs, - cache, - gitdir, - ref = "refs/notes/commits", - oid -}) { - const parent = await GitRefManager.resolve({ gitdir, fs, ref }); - const { blob } = await _readBlob({ - fs, - cache, - gitdir, - oid: parent, - filepath: oid - }); - return blob; -} -async function readNote({ - fs, - dir, - gitdir = join(dir, ".git"), - ref = "refs/notes/commits", - oid, - cache = {} -}) { - try { - assertParameter("fs", fs); - assertParameter("gitdir", gitdir); - assertParameter("ref", ref); - assertParameter("oid", oid); - return await _readNote({ - fs: new FileSystem(fs), - cache, - gitdir, - ref, - oid - }); - } catch (err) { - err.caller = "git.readNote"; - throw err; - } -} -async function readObject({ - fs: _fs, - dir, - gitdir = join(dir, ".git"), - oid, - format = "parsed", - filepath = void 0, - encoding = void 0, - cache = {} -}) { - try { - assertParameter("fs", _fs); - assertParameter("gitdir", gitdir); - assertParameter("oid", oid); - const fs = new FileSystem(_fs); - if (filepath !== void 0) { - oid = await resolveFilepath({ - fs, - cache, - gitdir, - oid, - filepath - }); - } - const _format = format === "parsed" ? "content" : format; - const result = await _readObject({ - fs, - cache, - gitdir, - oid, - format: _format - }); - result.oid = oid; - if (format === "parsed") { - result.format = "parsed"; - switch (result.type) { - case "commit": - result.object = GitCommit.from(result.object).parse(); - break; - case "tree": - result.object = GitTree.from(result.object).entries(); - break; - case "blob": - if (encoding) { - result.object = result.object.toString(encoding); - } else { - result.object = new Uint8Array(result.object); - result.format = "content"; - } - break; - case "tag": - result.object = GitAnnotatedTag.from(result.object).parse(); - break; - default: - throw new ObjectTypeError( - result.oid, - result.type, - "blob|commit|tag|tree" - ); - } - } else if (result.format === "deflated" || result.format === "wrapped") { - result.type = result.format; - } - return result; - } catch (err) { - err.caller = "git.readObject"; - throw err; - } -} -async function _readTag({ fs, cache, gitdir, oid }) { - const { type, object } = await _readObject({ - fs, - cache, - gitdir, - oid, - format: "content" - }); - if (type !== "tag") { - throw new ObjectTypeError(oid, type, "tag"); - } - const tag2 = GitAnnotatedTag.from(object); - const result = { - oid, - tag: tag2.parse(), - payload: tag2.payload() - }; - return result; -} -async function readTag({ - fs, - dir, - gitdir = join(dir, ".git"), - oid, - cache = {} -}) { - try { - assertParameter("fs", fs); - assertParameter("gitdir", gitdir); - assertParameter("oid", oid); - return await _readTag({ - fs: new FileSystem(fs), - cache, - gitdir, - oid - }); - } catch (err) { - err.caller = "git.readTag"; - throw err; - } -} -async function readTree({ - fs, - dir, - gitdir = join(dir, ".git"), - oid, - filepath = void 0, - cache = {} -}) { - try { - assertParameter("fs", fs); - assertParameter("gitdir", gitdir); - assertParameter("oid", oid); - return await _readTree({ - fs: new FileSystem(fs), - cache, - gitdir, - oid, - filepath - }); - } catch (err) { - err.caller = "git.readTree"; - throw err; - } -} -async function remove({ - fs: _fs, - dir, - gitdir = join(dir, ".git"), - filepath, - cache = {} -}) { - try { - assertParameter("fs", _fs); - assertParameter("gitdir", gitdir); - assertParameter("filepath", filepath); - await GitIndexManager.acquire( - { fs: new FileSystem(_fs), gitdir, cache }, - async function(index2) { - index2.delete({ filepath }); - } - ); - } catch (err) { - err.caller = "git.remove"; - throw err; - } -} -async function _removeNote({ - fs, - cache, - onSign, - gitdir, - ref = "refs/notes/commits", - oid, - author, - committer, - signingKey -}) { - let parent; - try { - parent = await GitRefManager.resolve({ gitdir, fs, ref }); - } catch (err) { - if (!(err instanceof NotFoundError)) { - throw err; - } - } - const result = await _readTree({ - fs, - gitdir, - oid: parent || "4b825dc642cb6eb9a060e54bf8d69288fbee4904" - }); - let tree = result.tree; - tree = tree.filter((entry) => entry.path !== oid); - const treeOid = await _writeTree({ - fs, - gitdir, - tree - }); - const commitOid = await _commit({ - fs, - cache, - onSign, - gitdir, - ref, - tree: treeOid, - parent: parent && [parent], - message: `Note removed by 'isomorphic-git removeNote' -`, - author, - committer, - signingKey - }); - return commitOid; -} -async function removeNote({ - fs: _fs, - onSign, - dir, - gitdir = join(dir, ".git"), - ref = "refs/notes/commits", - oid, - author: _author, - committer: _committer, - signingKey, - cache = {} -}) { - try { - assertParameter("fs", _fs); - assertParameter("gitdir", gitdir); - assertParameter("oid", oid); - const fs = new FileSystem(_fs); - const author = await normalizeAuthorObject({ fs, gitdir, author: _author }); - if (!author) - throw new MissingNameError("author"); - const committer = await normalizeCommitterObject({ - fs, - gitdir, - author, - committer: _committer - }); - if (!committer) - throw new MissingNameError("committer"); - return await _removeNote({ - fs, - cache, - onSign, - gitdir, - ref, - oid, - author, - committer, - signingKey - }); - } catch (err) { - err.caller = "git.removeNote"; - throw err; - } -} -async function _renameBranch({ - fs, - gitdir, - oldref, - ref, - checkout: checkout2 = false -}) { - if (ref !== import_clean_git_ref.default.clean(ref)) { - throw new InvalidRefNameError(ref, import_clean_git_ref.default.clean(ref)); - } - if (oldref !== import_clean_git_ref.default.clean(oldref)) { - throw new InvalidRefNameError(oldref, import_clean_git_ref.default.clean(oldref)); - } - const fulloldref = `refs/heads/${oldref}`; - const fullnewref = `refs/heads/${ref}`; - const newexist = await GitRefManager.exists({ fs, gitdir, ref: fullnewref }); - if (newexist) { - throw new AlreadyExistsError("branch", ref, false); - } - const value = await GitRefManager.resolve({ - fs, - gitdir, - ref: fulloldref, - depth: 1 - }); - await GitRefManager.writeRef({ fs, gitdir, ref: fullnewref, value }); - await GitRefManager.deleteRef({ fs, gitdir, ref: fulloldref }); - const fullCurrentBranchRef = await _currentBranch({ - fs, - gitdir, - fullname: true - }); - const isCurrentBranch = fullCurrentBranchRef === fulloldref; - if (checkout2 || isCurrentBranch) { - await GitRefManager.writeSymbolicRef({ - fs, - gitdir, - ref: "HEAD", - value: fullnewref - }); - } -} -async function renameBranch({ - fs, - dir, - gitdir = join(dir, ".git"), - ref, - oldref, - checkout: checkout2 = false -}) { - try { - assertParameter("fs", fs); - assertParameter("gitdir", gitdir); - assertParameter("ref", ref); - assertParameter("oldref", oldref); - return await _renameBranch({ - fs: new FileSystem(fs), - gitdir, - ref, - oldref, - checkout: checkout2 - }); - } catch (err) { - err.caller = "git.renameBranch"; - throw err; - } -} -async function hashObject$1({ gitdir, type, object }) { - return shasum(GitObject.wrap({ type, object })); -} -async function resetIndex({ - fs: _fs, - dir, - gitdir = join(dir, ".git"), - filepath, - ref, - cache = {} -}) { - try { - assertParameter("fs", _fs); - assertParameter("gitdir", gitdir); - assertParameter("filepath", filepath); - const fs = new FileSystem(_fs); - let oid; - let workdirOid; - try { - oid = await GitRefManager.resolve({ fs, gitdir, ref: ref || "HEAD" }); - } catch (e) { - if (ref) { - throw e; - } - } - if (oid) { - try { - oid = await resolveFilepath({ - fs, - cache, - gitdir, - oid, - filepath - }); - } catch (e) { - oid = null; - } - } - let stats = { - ctime: /* @__PURE__ */ new Date(0), - mtime: /* @__PURE__ */ new Date(0), - dev: 0, - ino: 0, - mode: 0, - uid: 0, - gid: 0, - size: 0 - }; - const object = dir && await fs.read(join(dir, filepath)); - if (object) { - workdirOid = await hashObject$1({ - gitdir, - type: "blob", - object - }); - if (oid === workdirOid) { - stats = await fs.lstat(join(dir, filepath)); - } - } - await GitIndexManager.acquire({ fs, gitdir, cache }, async function(index2) { - index2.delete({ filepath }); - if (oid) { - index2.insert({ filepath, stats, oid }); - } - }); - } catch (err) { - err.caller = "git.reset"; - throw err; - } -} -async function resolveRef({ - fs, - dir, - gitdir = join(dir, ".git"), - ref, - depth -}) { - try { - assertParameter("fs", fs); - assertParameter("gitdir", gitdir); - assertParameter("ref", ref); - const oid = await GitRefManager.resolve({ - fs: new FileSystem(fs), - gitdir, - ref, - depth - }); - return oid; - } catch (err) { - err.caller = "git.resolveRef"; - throw err; - } -} -async function setConfig({ - fs: _fs, - dir, - gitdir = join(dir, ".git"), - path: path2, - value, - append: append3 = false -}) { - try { - assertParameter("fs", _fs); - assertParameter("gitdir", gitdir); - assertParameter("path", path2); - const fs = new FileSystem(_fs); - const config = await GitConfigManager.get({ fs, gitdir }); - if (append3) { - await config.append(path2, value); - } else { - await config.set(path2, value); - } - await GitConfigManager.save({ fs, gitdir, config }); - } catch (err) { - err.caller = "git.setConfig"; - throw err; - } -} -async function status({ - fs: _fs, - dir, - gitdir = join(dir, ".git"), - filepath, - cache = {} -}) { - try { - assertParameter("fs", _fs); - assertParameter("gitdir", gitdir); - assertParameter("filepath", filepath); - const fs = new FileSystem(_fs); - const ignored = await GitIgnoreManager.isIgnored({ - fs, - gitdir, - dir, - filepath - }); - if (ignored) { - return "ignored"; - } - const headTree = await getHeadTree({ fs, cache, gitdir }); - const treeOid = await getOidAtPath({ - fs, - cache, - gitdir, - tree: headTree, - path: filepath - }); - const indexEntry = await GitIndexManager.acquire( - { fs, gitdir, cache }, - async function(index2) { - for (const entry of index2) { - if (entry.path === filepath) - return entry; - } - return null; - } - ); - const stats = await fs.lstat(join(dir, filepath)); - const H = treeOid !== null; - const I = indexEntry !== null; - const W = stats !== null; - const getWorkdirOid = async () => { - if (I && !compareStats(indexEntry, stats)) { - return indexEntry.oid; - } else { - const object = await fs.read(join(dir, filepath)); - const workdirOid = await hashObject$1({ - gitdir, - type: "blob", - object - }); - if (I && indexEntry.oid === workdirOid) { - if (stats.size !== -1) { - GitIndexManager.acquire({ fs, gitdir, cache }, async function(index2) { - index2.insert({ filepath, stats, oid: workdirOid }); - }); - } - } - return workdirOid; - } - }; - if (!H && !W && !I) - return "absent"; - if (!H && !W && I) - return "*absent"; - if (!H && W && !I) - return "*added"; - if (!H && W && I) { - const workdirOid = await getWorkdirOid(); - return workdirOid === indexEntry.oid ? "added" : "*added"; - } - if (H && !W && !I) - return "deleted"; - if (H && !W && I) { - return treeOid === indexEntry.oid ? "*deleted" : "*deleted"; - } - if (H && W && !I) { - const workdirOid = await getWorkdirOid(); - return workdirOid === treeOid ? "*undeleted" : "*undeletemodified"; - } - if (H && W && I) { - const workdirOid = await getWorkdirOid(); - if (workdirOid === treeOid) { - return workdirOid === indexEntry.oid ? "unmodified" : "*unmodified"; - } else { - return workdirOid === indexEntry.oid ? "modified" : "*modified"; - } - } - } catch (err) { - err.caller = "git.status"; - throw err; - } -} -async function getOidAtPath({ fs, cache, gitdir, tree, path: path2 }) { - if (typeof path2 === "string") - path2 = path2.split("/"); - const dirname3 = path2.shift(); - for (const entry of tree) { - if (entry.path === dirname3) { - if (path2.length === 0) { - return entry.oid; - } - const { type, object } = await _readObject({ - fs, - cache, - gitdir, - oid: entry.oid - }); - if (type === "tree") { - const tree2 = GitTree.from(object); - return getOidAtPath({ fs, cache, gitdir, tree: tree2, path: path2 }); - } - if (type === "blob") { - throw new ObjectTypeError(entry.oid, type, "blob", path2.join("/")); - } - } - } - return null; -} -async function getHeadTree({ fs, cache, gitdir }) { - let oid; - try { - oid = await GitRefManager.resolve({ fs, gitdir, ref: "HEAD" }); - } catch (e) { - if (e instanceof NotFoundError) { - return []; - } - } - const { tree } = await _readTree({ fs, cache, gitdir, oid }); - return tree; -} -async function statusMatrix({ - fs: _fs, - dir, - gitdir = join(dir, ".git"), - ref = "HEAD", - filepaths = ["."], - filter, - cache = {}, - ignored: shouldIgnore = false -}) { - try { - assertParameter("fs", _fs); - assertParameter("gitdir", gitdir); - assertParameter("ref", ref); - const fs = new FileSystem(_fs); - return await _walk({ - fs, - cache, - dir, - gitdir, - trees: [TREE({ ref }), WORKDIR(), STAGE()], - map: async function(filepath, [head, workdir, stage]) { - if (!head && !stage && workdir) { - if (!shouldIgnore) { - const isIgnored2 = await GitIgnoreManager.isIgnored({ - fs, - dir, - filepath - }); - if (isIgnored2) { - return null; - } - } - } - if (!filepaths.some((base) => worthWalking(filepath, base))) { - return null; - } - if (filter) { - if (!filter(filepath)) - return; - } - const [headType, workdirType, stageType] = await Promise.all([ - head && head.type(), - workdir && workdir.type(), - stage && stage.type() - ]); - const isBlob = [headType, workdirType, stageType].includes("blob"); - if ((headType === "tree" || headType === "special") && !isBlob) - return; - if (headType === "commit") - return null; - if ((workdirType === "tree" || workdirType === "special") && !isBlob) - return; - if (stageType === "commit") - return null; - if ((stageType === "tree" || stageType === "special") && !isBlob) - return; - const headOid = headType === "blob" ? await head.oid() : void 0; - const stageOid = stageType === "blob" ? await stage.oid() : void 0; - let workdirOid; - if (headType !== "blob" && workdirType === "blob" && stageType !== "blob") { - workdirOid = "42"; - } else if (workdirType === "blob") { - workdirOid = await workdir.oid(); - } - const entry = [void 0, headOid, workdirOid, stageOid]; - const result = entry.map((value) => entry.indexOf(value)); - result.shift(); - return [filepath, ...result]; - } - }); - } catch (err) { - err.caller = "git.statusMatrix"; - throw err; - } -} -async function tag({ - fs: _fs, - dir, - gitdir = join(dir, ".git"), - ref, - object, - force = false -}) { - try { - assertParameter("fs", _fs); - assertParameter("gitdir", gitdir); - assertParameter("ref", ref); - const fs = new FileSystem(_fs); - if (ref === void 0) { - throw new MissingParameterError("ref"); - } - ref = ref.startsWith("refs/tags/") ? ref : `refs/tags/${ref}`; - const value = await GitRefManager.resolve({ - fs, - gitdir, - ref: object || "HEAD" - }); - if (!force && await GitRefManager.exists({ fs, gitdir, ref })) { - throw new AlreadyExistsError("tag", ref); - } - await GitRefManager.writeRef({ fs, gitdir, ref, value }); - } catch (err) { - err.caller = "git.tag"; - throw err; - } -} -async function updateIndex({ - fs: _fs, - dir, - gitdir = join(dir, ".git"), - cache = {}, - filepath, - oid, - mode, - add: add2, - remove: remove3, - force -}) { - try { - assertParameter("fs", _fs); - assertParameter("gitdir", gitdir); - assertParameter("filepath", filepath); - const fs = new FileSystem(_fs); - if (remove3) { - return await GitIndexManager.acquire( - { fs, gitdir, cache }, - async function(index2) { - let fileStats2; - if (!force) { - fileStats2 = await fs.lstat(join(dir, filepath)); - if (fileStats2) { - if (fileStats2.isDirectory()) { - throw new InvalidFilepathError("directory"); - } - return; - } - } - if (index2.has({ filepath })) { - index2.delete({ - filepath - }); - } - } - ); - } - let fileStats; - if (!oid) { - fileStats = await fs.lstat(join(dir, filepath)); - if (!fileStats) { - throw new NotFoundError( - `file at "${filepath}" on disk and "remove" not set` - ); - } - if (fileStats.isDirectory()) { - throw new InvalidFilepathError("directory"); - } - } - return await GitIndexManager.acquire({ fs, gitdir, cache }, async function(index2) { - if (!add2 && !index2.has({ filepath })) { - throw new NotFoundError( - `file at "${filepath}" in index and "add" not set` - ); - } - let stats = { - ctime: /* @__PURE__ */ new Date(0), - mtime: /* @__PURE__ */ new Date(0), - dev: 0, - ino: 0, - mode, - uid: 0, - gid: 0, - size: 0 - }; - if (!oid) { - stats = fileStats; - const object = stats.isSymbolicLink() ? await fs.readlink(join(dir, filepath)) : await fs.read(join(dir, filepath)); - oid = await _writeObject({ - fs, - gitdir, - type: "blob", - format: "content", - object - }); - } - index2.insert({ - filepath, - oid, - stats - }); - return oid; - }); - } catch (err) { - err.caller = "git.updateIndex"; - throw err; - } -} -function version() { - try { - return pkg.version; - } catch (err) { - err.caller = "git.version"; - throw err; - } -} -async function walk({ - fs, - dir, - gitdir = join(dir, ".git"), - trees, - map, - reduce, - iterate, - cache = {} -}) { - try { - assertParameter("fs", fs); - assertParameter("gitdir", gitdir); - assertParameter("trees", trees); - return await _walk({ - fs: new FileSystem(fs), - cache, - dir, - gitdir, - trees, - map, - reduce, - iterate - }); - } catch (err) { - err.caller = "git.walk"; - throw err; - } -} -async function writeBlob({ fs, dir, gitdir = join(dir, ".git"), blob }) { - try { - assertParameter("fs", fs); - assertParameter("gitdir", gitdir); - assertParameter("blob", blob); - return await _writeObject({ - fs: new FileSystem(fs), - gitdir, - type: "blob", - object: blob, - format: "content" - }); - } catch (err) { - err.caller = "git.writeBlob"; - throw err; - } -} -async function _writeCommit({ fs, gitdir, commit: commit2 }) { - const object = GitCommit.from(commit2).toObject(); - const oid = await _writeObject({ - fs, - gitdir, - type: "commit", - object, - format: "content" - }); - return oid; -} -async function writeCommit({ - fs, - dir, - gitdir = join(dir, ".git"), - commit: commit2 -}) { - try { - assertParameter("fs", fs); - assertParameter("gitdir", gitdir); - assertParameter("commit", commit2); - return await _writeCommit({ - fs: new FileSystem(fs), - gitdir, - commit: commit2 - }); - } catch (err) { - err.caller = "git.writeCommit"; - throw err; - } -} -async function writeObject({ - fs: _fs, - dir, - gitdir = join(dir, ".git"), - type, - object, - format = "parsed", - oid, - encoding = void 0 -}) { - try { - const fs = new FileSystem(_fs); - if (format === "parsed") { - switch (type) { - case "commit": - object = GitCommit.from(object).toObject(); - break; - case "tree": - object = GitTree.from(object).toObject(); - break; - case "blob": - object = Buffer.from(object, encoding); - break; - case "tag": - object = GitAnnotatedTag.from(object).toObject(); - break; - default: - throw new ObjectTypeError(oid || "", type, "blob|commit|tag|tree"); - } - format = "content"; - } - oid = await _writeObject({ - fs, - gitdir, - type, - object, - oid, - format - }); - return oid; - } catch (err) { - err.caller = "git.writeObject"; - throw err; - } -} -async function writeRef({ - fs: _fs, - dir, - gitdir = join(dir, ".git"), - ref, - value, - force = false, - symbolic = false -}) { - try { - assertParameter("fs", _fs); - assertParameter("gitdir", gitdir); - assertParameter("ref", ref); - assertParameter("value", value); - const fs = new FileSystem(_fs); - if (ref !== import_clean_git_ref.default.clean(ref)) { - throw new InvalidRefNameError(ref, import_clean_git_ref.default.clean(ref)); - } - if (!force && await GitRefManager.exists({ fs, gitdir, ref })) { - throw new AlreadyExistsError("ref", ref); - } - if (symbolic) { - await GitRefManager.writeSymbolicRef({ - fs, - gitdir, - ref, - value - }); - } else { - value = await GitRefManager.resolve({ - fs, - gitdir, - ref: value - }); - await GitRefManager.writeRef({ - fs, - gitdir, - ref, - value - }); - } - } catch (err) { - err.caller = "git.writeRef"; - throw err; - } -} -async function _writeTag({ fs, gitdir, tag: tag2 }) { - const object = GitAnnotatedTag.from(tag2).toObject(); - const oid = await _writeObject({ - fs, - gitdir, - type: "tag", - object, - format: "content" - }); - return oid; -} -async function writeTag({ fs, dir, gitdir = join(dir, ".git"), tag: tag2 }) { - try { - assertParameter("fs", fs); - assertParameter("gitdir", gitdir); - assertParameter("tag", tag2); - return await _writeTag({ - fs: new FileSystem(fs), - gitdir, - tag: tag2 - }); - } catch (err) { - err.caller = "git.writeTag"; - throw err; - } -} -async function writeTree({ fs, dir, gitdir = join(dir, ".git"), tree }) { - try { - assertParameter("fs", fs); - assertParameter("gitdir", gitdir); - assertParameter("tree", tree); - return await _writeTree({ - fs: new FileSystem(fs), - gitdir, - tree - }); - } catch (err) { - err.caller = "git.writeTree"; - throw err; - } -} -var index = { - Errors, - STAGE, - TREE, - WORKDIR, - add, - abortMerge, - addNote, - addRemote, - annotatedTag, - branch, - checkout, - clone, - commit, - getConfig, - getConfigAll, - setConfig, - currentBranch, - deleteBranch, - deleteRef, - deleteRemote, - deleteTag, - expandOid, - expandRef, - fastForward, - fetch, - findMergeBase, - findRoot, - getRemoteInfo, - getRemoteInfo2, - hashBlob, - indexPack, - init, - isDescendent, - isIgnored, - listBranches, - listFiles, - listNotes, - listRemotes, - listServerRefs, - listTags, - log, - merge, - packObjects, - pull, - push, - readBlob, - readCommit, - readNote, - readObject, - readTag, - readTree, - remove, - removeNote, - renameBranch, - resetIndex, - updateIndex, - resolveRef, - status, - statusMatrix, - tag, - version, - walk, - writeBlob, - writeCommit, - writeObject, - writeRef, - writeTag, - writeTree -}; -var isomorphic_git_default = index; - -// src/main.ts -var import_obsidian31 = require("obsidian"); - -// src/lineAuthor/lineAuthorIntegration.ts -init_polyfill_buffer(); -var import_obsidian12 = require("obsidian"); - -// src/gitManager/simpleGit.ts -init_polyfill_buffer(); -var import_child_process2 = require("child_process"); -var import_debug2 = __toESM(require_browser()); -var import_obsidian4 = require("obsidian"); -var path = __toESM(require("path")); -var import_path = require("path"); - -// node_modules/.pnpm/simple-git@https+++codeload.github.com+Vinzent03+git-js+tar.gz+6b9a2d899bc8256e38a1d6f0b8a881_rku6lxlylrt42756swupwur2wa/node_modules/simple-git/dist/esm/index.js -init_polyfill_buffer(); -var import_file_exists = __toESM(require_dist(), 1); -var import_debug = __toESM(require_browser(), 1); -var import_child_process = require("child_process"); -var import_promise_deferred = __toESM(require_dist2(), 1); -var import_promise_deferred2 = __toESM(require_dist2(), 1); -var __defProp2 = Object.defineProperty; -var __defProps = Object.defineProperties; -var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor; -var __getOwnPropDescs = Object.getOwnPropertyDescriptors; -var __getOwnPropNames2 = Object.getOwnPropertyNames; -var __getOwnPropSymbols = Object.getOwnPropertySymbols; -var __hasOwnProp2 = Object.prototype.hasOwnProperty; -var __propIsEnum = Object.prototype.propertyIsEnumerable; -var __defNormalProp2 = (obj, key2, value) => key2 in obj ? __defProp2(obj, key2, { enumerable: true, configurable: true, writable: true, value }) : obj[key2] = value; -var __spreadValues = (a, b) => { - for (var prop in b || (b = {})) - if (__hasOwnProp2.call(b, prop)) - __defNormalProp2(a, prop, b[prop]); - if (__getOwnPropSymbols) - for (var prop of __getOwnPropSymbols(b)) { - if (__propIsEnum.call(b, prop)) - __defNormalProp2(a, prop, b[prop]); - } - return a; -}; -var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b)); -var __markAsModule = (target) => __defProp2(target, "__esModule", { value: true }); -var __esm2 = (fn, res) => function __init() { - return fn && (res = (0, fn[__getOwnPropNames2(fn)[0]])(fn = 0)), res; -}; -var __commonJS2 = (cb, mod) => function __require() { - return mod || (0, cb[__getOwnPropNames2(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; -}; -var __export2 = (target, all) => { - for (var name in all) - __defProp2(target, name, { get: all[name], enumerable: true }); -}; -var __reExport = (target, module2, copyDefault, desc) => { - if (module2 && typeof module2 === "object" || typeof module2 === "function") { - for (let key2 of __getOwnPropNames2(module2)) - if (!__hasOwnProp2.call(target, key2) && (copyDefault || key2 !== "default")) - __defProp2(target, key2, { get: () => module2[key2], enumerable: !(desc = __getOwnPropDesc2(module2, key2)) || desc.enumerable }); - } - return target; -}; -var __toCommonJS2 = /* @__PURE__ */ ((cache) => { - return (module2, temp) => { - return cache && cache.get(module2) || (temp = __reExport(__markAsModule({}), module2, 1), cache && cache.set(module2, temp), temp); - }; -})(typeof WeakMap !== "undefined" ? /* @__PURE__ */ new WeakMap() : 0); -var __async = (__this, __arguments, generator) => { - return new Promise((resolve, reject) => { - var fulfilled = (value) => { - try { - step(generator.next(value)); - } catch (e) { - reject(e); - } - }; - var rejected = (value) => { - try { - step(generator.throw(value)); - } catch (e) { - reject(e); - } - }; - var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected); - step((generator = generator.apply(__this, __arguments)).next()); - }); -}; -var GitError; -var init_git_error = __esm2({ - "src/lib/errors/git-error.ts"() { - GitError = class extends Error { - constructor(task, message) { - super(message); - this.task = task; - Object.setPrototypeOf(this, new.target.prototype); - } - }; - } -}); -var GitResponseError; -var init_git_response_error = __esm2({ - "src/lib/errors/git-response-error.ts"() { - init_git_error(); - GitResponseError = class extends GitError { - constructor(git, message) { - super(void 0, message || String(git)); - this.git = git; - } - }; - } -}); -var TaskConfigurationError; -var init_task_configuration_error = __esm2({ - "src/lib/errors/task-configuration-error.ts"() { - init_git_error(); - TaskConfigurationError = class extends GitError { - constructor(message) { - super(void 0, message); - } - }; - } -}); -function asFunction(source) { - return typeof source === "function" ? source : NOOP; -} -function isUserFunction(source) { - return typeof source === "function" && source !== NOOP; -} -function splitOn(input, char) { - const index2 = input.indexOf(char); - if (index2 <= 0) { - return [input, ""]; - } - return [input.substr(0, index2), input.substr(index2 + 1)]; -} -function first(input, offset = 0) { - return isArrayLike(input) && input.length > offset ? input[offset] : void 0; -} -function last(input, offset = 0) { - if (isArrayLike(input) && input.length > offset) { - return input[input.length - 1 - offset]; - } -} -function isArrayLike(input) { - return !!(input && typeof input.length === "number"); -} -function toLinesWithContent(input = "", trimmed2 = true, separator2 = "\n") { - return input.split(separator2).reduce((output, line) => { - const lineContent = trimmed2 ? line.trim() : line; - if (lineContent) { - output.push(lineContent); - } - return output; - }, []); -} -function forEachLineWithContent(input, callback) { - return toLinesWithContent(input, true).map((line) => callback(line)); -} -function folderExists(path2) { - return (0, import_file_exists.exists)(path2, import_file_exists.FOLDER); -} -function append(target, item) { - if (Array.isArray(target)) { - if (!target.includes(item)) { - target.push(item); - } - } else { - target.add(item); - } - return item; -} -function including(target, item) { - if (Array.isArray(target) && !target.includes(item)) { - target.push(item); - } - return target; -} -function remove2(target, item) { - if (Array.isArray(target)) { - const index2 = target.indexOf(item); - if (index2 >= 0) { - target.splice(index2, 1); - } - } else { - target.delete(item); - } - return item; -} -function asArray(source) { - return Array.isArray(source) ? source : [source]; -} -function asStringArray(source) { - return asArray(source).map(String); -} -function asNumber(source, onNaN = 0) { - if (source == null) { - return onNaN; - } - const num2 = parseInt(source, 10); - return isNaN(num2) ? onNaN : num2; -} -function prefixedArray(input, prefix) { - const output = []; - for (let i = 0, max = input.length; i < max; i++) { - output.push(prefix, input[i]); - } - return output; -} -function bufferToString(input) { - return (Array.isArray(input) ? Buffer.concat(input) : input).toString("utf-8"); -} -function pick(source, properties) { - return Object.assign({}, ...properties.map((property) => property in source ? { [property]: source[property] } : {})); -} -function delay(duration = 0) { - return new Promise((done) => setTimeout(done, duration)); -} -var NULL; -var NOOP; -var objectToString; -var init_util = __esm2({ - "src/lib/utils/util.ts"() { - NULL = "\0"; - NOOP = () => { - }; - objectToString = Object.prototype.toString.call.bind(Object.prototype.toString); - } -}); -function filterType(input, filter, def) { - if (filter(input)) { - return input; - } - return arguments.length > 2 ? def : void 0; -} -function filterPrimitives(input, omit) { - return /number|string|boolean/.test(typeof input) && (!omit || !omit.includes(typeof input)); -} -function filterPlainObject(input) { - return !!input && objectToString(input) === "[object Object]"; -} -function filterFunction(input) { - return typeof input === "function"; -} -var filterArray; -var filterString; -var filterStringArray; -var filterStringOrStringArray; -var filterHasLength; -var init_argument_filters = __esm2({ - "src/lib/utils/argument-filters.ts"() { - init_util(); - filterArray = (input) => { - return Array.isArray(input); - }; - filterString = (input) => { - return typeof input === "string"; - }; - filterStringArray = (input) => { - return Array.isArray(input) && input.every(filterString); - }; - filterStringOrStringArray = (input) => { - return filterString(input) || Array.isArray(input) && input.every(filterString); - }; - filterHasLength = (input) => { - if (input == null || "number|boolean|function".includes(typeof input)) { - return false; - } - return Array.isArray(input) || typeof input === "string" || typeof input.length === "number"; - }; - } -}); -var ExitCodes; -var init_exit_codes = __esm2({ - "src/lib/utils/exit-codes.ts"() { - ExitCodes = /* @__PURE__ */ ((ExitCodes2) => { - ExitCodes2[ExitCodes2["SUCCESS"] = 0] = "SUCCESS"; - ExitCodes2[ExitCodes2["ERROR"] = 1] = "ERROR"; - ExitCodes2[ExitCodes2["NOT_FOUND"] = -2] = "NOT_FOUND"; - ExitCodes2[ExitCodes2["UNCLEAN"] = 128] = "UNCLEAN"; - return ExitCodes2; - })(ExitCodes || {}); - } -}); -var GitOutputStreams; -var init_git_output_streams = __esm2({ - "src/lib/utils/git-output-streams.ts"() { - GitOutputStreams = class { - constructor(stdOut, stdErr) { - this.stdOut = stdOut; - this.stdErr = stdErr; - } - asStrings() { - return new GitOutputStreams(this.stdOut.toString("utf8"), this.stdErr.toString("utf8")); - } - }; - } -}); -var LineParser; -var RemoteLineParser; -var init_line_parser = __esm2({ - "src/lib/utils/line-parser.ts"() { - LineParser = class { - constructor(regExp, useMatches) { - this.matches = []; - this.parse = (line, target) => { - this.resetMatches(); - if (!this._regExp.every((reg, index2) => this.addMatch(reg, index2, line(index2)))) { - return false; - } - return this.useMatches(target, this.prepareMatches()) !== false; - }; - this._regExp = Array.isArray(regExp) ? regExp : [regExp]; - if (useMatches) { - this.useMatches = useMatches; - } - } - useMatches(target, match) { - throw new Error(`LineParser:useMatches not implemented`); - } - resetMatches() { - this.matches.length = 0; - } - prepareMatches() { - return this.matches; - } - addMatch(reg, index2, line) { - const matched = line && reg.exec(line); - if (matched) { - this.pushMatch(index2, matched); - } - return !!matched; - } - pushMatch(_index, matched) { - this.matches.push(...matched.slice(1)); - } - }; - RemoteLineParser = class extends LineParser { - addMatch(reg, index2, line) { - return /^remote:\s/.test(String(line)) && super.addMatch(reg, index2, line); - } - pushMatch(index2, matched) { - if (index2 > 0 || matched.length > 1) { - super.pushMatch(index2, matched); - } - } - }; - } -}); -function createInstanceConfig(...options) { - const baseDir = process.cwd(); - const config = Object.assign(__spreadValues({ baseDir }, defaultOptions), ...options.filter((o) => typeof o === "object" && o)); - config.baseDir = config.baseDir || baseDir; - config.trimmed = config.trimmed === true; - return config; -} -var defaultOptions; -var init_simple_git_options = __esm2({ - "src/lib/utils/simple-git-options.ts"() { - defaultOptions = { - binary: "git", - maxConcurrentProcesses: 5, - config: [], - trimmed: false - }; - } -}); -function appendTaskOptions(options, commands2 = []) { - if (!filterPlainObject(options)) { - return commands2; - } - return Object.keys(options).reduce((commands22, key2) => { - const value = options[key2]; - if (filterPrimitives(value, ["boolean"])) { - commands22.push(key2 + "=" + value); - } else { - commands22.push(key2); - } - return commands22; - }, commands2); -} -function getTrailingOptions(args, initialPrimitive = 0, objectOnly = false) { - const command = []; - for (let i = 0, max = initialPrimitive < 0 ? args.length : initialPrimitive; i < max; i++) { - if ("string|number".includes(typeof args[i])) { - command.push(String(args[i])); - } - } - appendTaskOptions(trailingOptionsArgument(args), command); - if (!objectOnly) { - command.push(...trailingArrayArgument(args)); - } - return command; -} -function trailingArrayArgument(args) { - const hasTrailingCallback = typeof last(args) === "function"; - return filterType(last(args, hasTrailingCallback ? 1 : 0), filterArray, []); -} -function trailingOptionsArgument(args) { - const hasTrailingCallback = filterFunction(last(args)); - return filterType(last(args, hasTrailingCallback ? 1 : 0), filterPlainObject); -} -function trailingFunctionArgument(args, includeNoop = true) { - const callback = asFunction(last(args)); - return includeNoop || isUserFunction(callback) ? callback : void 0; -} -var init_task_options = __esm2({ - "src/lib/utils/task-options.ts"() { - init_argument_filters(); - init_util(); - } -}); -function callTaskParser(parser3, streams) { - return parser3(streams.stdOut, streams.stdErr); -} -function parseStringResponse(result, parsers12, texts, trim = true) { - asArray(texts).forEach((text2) => { - for (let lines = toLinesWithContent(text2, trim), i = 0, max = lines.length; i < max; i++) { - const line = (offset = 0) => { - if (i + offset >= max) { - return; - } - return lines[i + offset]; - }; - parsers12.some(({ parse: parse2 }) => parse2(line, result)); - } - }); - return result; -} -var init_task_parser = __esm2({ - "src/lib/utils/task-parser.ts"() { - init_util(); - } -}); -var utils_exports = {}; -__export2(utils_exports, { - ExitCodes: () => ExitCodes, - GitOutputStreams: () => GitOutputStreams, - LineParser: () => LineParser, - NOOP: () => NOOP, - NULL: () => NULL, - RemoteLineParser: () => RemoteLineParser, - append: () => append, - appendTaskOptions: () => appendTaskOptions, - asArray: () => asArray, - asFunction: () => asFunction, - asNumber: () => asNumber, - asStringArray: () => asStringArray, - bufferToString: () => bufferToString, - callTaskParser: () => callTaskParser, - createInstanceConfig: () => createInstanceConfig, - delay: () => delay, - filterArray: () => filterArray, - filterFunction: () => filterFunction, - filterHasLength: () => filterHasLength, - filterPlainObject: () => filterPlainObject, - filterPrimitives: () => filterPrimitives, - filterString: () => filterString, - filterStringArray: () => filterStringArray, - filterStringOrStringArray: () => filterStringOrStringArray, - filterType: () => filterType, - first: () => first, - folderExists: () => folderExists, - forEachLineWithContent: () => forEachLineWithContent, - getTrailingOptions: () => getTrailingOptions, - including: () => including, - isUserFunction: () => isUserFunction, - last: () => last, - objectToString: () => objectToString, - parseStringResponse: () => parseStringResponse, - pick: () => pick, - prefixedArray: () => prefixedArray, - remove: () => remove2, - splitOn: () => splitOn, - toLinesWithContent: () => toLinesWithContent, - trailingFunctionArgument: () => trailingFunctionArgument, - trailingOptionsArgument: () => trailingOptionsArgument -}); -var init_utils = __esm2({ - "src/lib/utils/index.ts"() { - init_argument_filters(); - init_exit_codes(); - init_git_output_streams(); - init_line_parser(); - init_simple_git_options(); - init_task_options(); - init_task_parser(); - init_util(); - } -}); -var check_is_repo_exports = {}; -__export2(check_is_repo_exports, { - CheckRepoActions: () => CheckRepoActions, - checkIsBareRepoTask: () => checkIsBareRepoTask, - checkIsRepoRootTask: () => checkIsRepoRootTask, - checkIsRepoTask: () => checkIsRepoTask -}); -function checkIsRepoTask(action) { - switch (action) { - case "bare": - return checkIsBareRepoTask(); - case "root": - return checkIsRepoRootTask(); - } - const commands2 = ["rev-parse", "--is-inside-work-tree"]; - return { - commands: commands2, - format: "utf-8", - onError, - parser - }; -} -function checkIsRepoRootTask() { - const commands2 = ["rev-parse", "--git-dir"]; - return { - commands: commands2, - format: "utf-8", - onError, - parser(path2) { - return /^\.(git)?$/.test(path2.trim()); - } - }; -} -function checkIsBareRepoTask() { - const commands2 = ["rev-parse", "--is-bare-repository"]; - return { - commands: commands2, - format: "utf-8", - onError, - parser - }; -} -function isNotRepoMessage(error) { - return /(Not a git repository|Kein Git-Repository)/i.test(String(error)); -} -var CheckRepoActions; -var onError; -var parser; -var init_check_is_repo = __esm2({ - "src/lib/tasks/check-is-repo.ts"() { - init_utils(); - CheckRepoActions = /* @__PURE__ */ ((CheckRepoActions2) => { - CheckRepoActions2["BARE"] = "bare"; - CheckRepoActions2["IN_TREE"] = "tree"; - CheckRepoActions2["IS_REPO_ROOT"] = "root"; - return CheckRepoActions2; - })(CheckRepoActions || {}); - onError = ({ exitCode }, error, done, fail) => { - if (exitCode === 128 && isNotRepoMessage(error)) { - return done(Buffer.from("false")); - } - fail(error); - }; - parser = (text2) => { - return text2.trim() === "true"; - }; - } -}); -function cleanSummaryParser(dryRun, text2) { - const summary = new CleanResponse(dryRun); - const regexp = dryRun ? dryRunRemovalRegexp : removalRegexp; - toLinesWithContent(text2).forEach((line) => { - const removed = line.replace(regexp, ""); - summary.paths.push(removed); - (isFolderRegexp.test(removed) ? summary.folders : summary.files).push(removed); - }); - return summary; -} -var CleanResponse; -var removalRegexp; -var dryRunRemovalRegexp; -var isFolderRegexp; -var init_CleanSummary = __esm2({ - "src/lib/responses/CleanSummary.ts"() { - init_utils(); - CleanResponse = class { - constructor(dryRun) { - this.dryRun = dryRun; - this.paths = []; - this.files = []; - this.folders = []; - } - }; - removalRegexp = /^[a-z]+\s*/i; - dryRunRemovalRegexp = /^[a-z]+\s+[a-z]+\s*/i; - isFolderRegexp = /\/$/; - } -}); -var task_exports = {}; -__export2(task_exports, { - EMPTY_COMMANDS: () => EMPTY_COMMANDS, - adhocExecTask: () => adhocExecTask, - configurationErrorTask: () => configurationErrorTask, - isBufferTask: () => isBufferTask, - isEmptyTask: () => isEmptyTask, - straightThroughBufferTask: () => straightThroughBufferTask, - straightThroughStringTask: () => straightThroughStringTask -}); -function adhocExecTask(parser3) { - return { - commands: EMPTY_COMMANDS, - format: "empty", - parser: parser3 - }; -} -function configurationErrorTask(error) { - return { - commands: EMPTY_COMMANDS, - format: "empty", - parser() { - throw typeof error === "string" ? new TaskConfigurationError(error) : error; - } - }; -} -function straightThroughStringTask(commands2, trimmed2 = false) { - return { - commands: commands2, - format: "utf-8", - parser(text2) { - return trimmed2 ? String(text2).trim() : text2; - } - }; -} -function straightThroughBufferTask(commands2) { - return { - commands: commands2, - format: "buffer", - parser(buffer2) { - return buffer2; - } - }; -} -function isBufferTask(task) { - return task.format === "buffer"; -} -function isEmptyTask(task) { - return task.format === "empty" || !task.commands.length; -} -var EMPTY_COMMANDS; -var init_task = __esm2({ - "src/lib/tasks/task.ts"() { - init_task_configuration_error(); - EMPTY_COMMANDS = []; - } -}); -var clean_exports = {}; -__export2(clean_exports, { - CONFIG_ERROR_INTERACTIVE_MODE: () => CONFIG_ERROR_INTERACTIVE_MODE, - CONFIG_ERROR_MODE_REQUIRED: () => CONFIG_ERROR_MODE_REQUIRED, - CONFIG_ERROR_UNKNOWN_OPTION: () => CONFIG_ERROR_UNKNOWN_OPTION, - CleanOptions: () => CleanOptions, - cleanTask: () => cleanTask, - cleanWithOptionsTask: () => cleanWithOptionsTask, - isCleanOptionsArray: () => isCleanOptionsArray -}); -function cleanWithOptionsTask(mode, customArgs) { - const { cleanMode, options, valid } = getCleanOptions(mode); - if (!cleanMode) { - return configurationErrorTask(CONFIG_ERROR_MODE_REQUIRED); - } - if (!valid.options) { - return configurationErrorTask(CONFIG_ERROR_UNKNOWN_OPTION + JSON.stringify(mode)); - } - options.push(...customArgs); - if (options.some(isInteractiveMode)) { - return configurationErrorTask(CONFIG_ERROR_INTERACTIVE_MODE); - } - return cleanTask(cleanMode, options); -} -function cleanTask(mode, customArgs) { - const commands2 = ["clean", `-${mode}`, ...customArgs]; - return { - commands: commands2, - format: "utf-8", - parser(text2) { - return cleanSummaryParser(mode === "n", text2); - } - }; -} -function isCleanOptionsArray(input) { - return Array.isArray(input) && input.every((test) => CleanOptionValues.has(test)); -} -function getCleanOptions(input) { - let cleanMode; - let options = []; - let valid = { cleanMode: false, options: true }; - input.replace(/[^a-z]i/g, "").split("").forEach((char) => { - if (isCleanMode(char)) { - cleanMode = char; - valid.cleanMode = true; - } else { - valid.options = valid.options && isKnownOption(options[options.length] = `-${char}`); - } - }); - return { - cleanMode, - options, - valid - }; -} -function isCleanMode(cleanMode) { - return cleanMode === "f" || cleanMode === "n"; -} -function isKnownOption(option) { - return /^-[a-z]$/i.test(option) && CleanOptionValues.has(option.charAt(1)); -} -function isInteractiveMode(option) { - if (/^-[^\-]/.test(option)) { - return option.indexOf("i") > 0; - } - return option === "--interactive"; -} -var CONFIG_ERROR_INTERACTIVE_MODE; -var CONFIG_ERROR_MODE_REQUIRED; -var CONFIG_ERROR_UNKNOWN_OPTION; -var CleanOptions; -var CleanOptionValues; -var init_clean = __esm2({ - "src/lib/tasks/clean.ts"() { - init_CleanSummary(); - init_utils(); - init_task(); - CONFIG_ERROR_INTERACTIVE_MODE = "Git clean interactive mode is not supported"; - CONFIG_ERROR_MODE_REQUIRED = 'Git clean mode parameter ("n" or "f") is required'; - CONFIG_ERROR_UNKNOWN_OPTION = "Git clean unknown option found in: "; - CleanOptions = /* @__PURE__ */ ((CleanOptions2) => { - CleanOptions2["DRY_RUN"] = "n"; - CleanOptions2["FORCE"] = "f"; - CleanOptions2["IGNORED_INCLUDED"] = "x"; - CleanOptions2["IGNORED_ONLY"] = "X"; - CleanOptions2["EXCLUDING"] = "e"; - CleanOptions2["QUIET"] = "q"; - CleanOptions2["RECURSIVE"] = "d"; - return CleanOptions2; - })(CleanOptions || {}); - CleanOptionValues = /* @__PURE__ */ new Set([ - "i", - ...asStringArray(Object.values(CleanOptions)) - ]); - } -}); -function configListParser(text2) { - const config = new ConfigList(); - for (const item of configParser(text2)) { - config.addValue(item.file, String(item.key), item.value); - } - return config; -} -function configGetParser(text2, key2) { - let value = null; - const values = []; - const scopes = /* @__PURE__ */ new Map(); - for (const item of configParser(text2, key2)) { - if (item.key !== key2) { - continue; - } - values.push(value = item.value); - if (!scopes.has(item.file)) { - scopes.set(item.file, []); - } - scopes.get(item.file).push(value); - } - return { - key: key2, - paths: Array.from(scopes.keys()), - scopes, - value, - values - }; -} -function configFilePath(filePath) { - return filePath.replace(/^(file):/, ""); -} -function* configParser(text2, requestedKey = null) { - const lines = text2.split("\0"); - for (let i = 0, max = lines.length - 1; i < max; ) { - const file = configFilePath(lines[i++]); - let value = lines[i++]; - let key2 = requestedKey; - if (value.includes("\n")) { - const line = splitOn(value, "\n"); - key2 = line[0]; - value = line[1]; - } - yield { file, key: key2, value }; - } -} -var ConfigList; -var init_ConfigList = __esm2({ - "src/lib/responses/ConfigList.ts"() { - init_utils(); - ConfigList = class { - constructor() { - this.files = []; - this.values = /* @__PURE__ */ Object.create(null); - } - get all() { - if (!this._all) { - this._all = this.files.reduce((all, file) => { - return Object.assign(all, this.values[file]); - }, {}); - } - return this._all; - } - addFile(file) { - if (!(file in this.values)) { - const latest = last(this.files); - this.values[file] = latest ? Object.create(this.values[latest]) : {}; - this.files.push(file); - } - return this.values[file]; - } - addValue(file, key2, value) { - const values = this.addFile(file); - if (!values.hasOwnProperty(key2)) { - values[key2] = value; - } else if (Array.isArray(values[key2])) { - values[key2].push(value); - } else { - values[key2] = [values[key2], value]; - } - this._all = void 0; - } - }; - } -}); -function asConfigScope(scope, fallback) { - if (typeof scope === "string" && GitConfigScope.hasOwnProperty(scope)) { - return scope; - } - return fallback; -} -function addConfigTask(key2, value, append22, scope) { - const commands2 = ["config", `--${scope}`]; - if (append22) { - commands2.push("--add"); - } - commands2.push(key2, value); - return { - commands: commands2, - format: "utf-8", - parser(text2) { - return text2; - } - }; -} -function getConfigTask(key2, scope) { - const commands2 = ["config", "--null", "--show-origin", "--get-all", key2]; - if (scope) { - commands2.splice(1, 0, `--${scope}`); - } - return { - commands: commands2, - format: "utf-8", - parser(text2) { - return configGetParser(text2, key2); - } - }; -} -function listConfigTask(scope) { - const commands2 = ["config", "--list", "--show-origin", "--null"]; - if (scope) { - commands2.push(`--${scope}`); - } - return { - commands: commands2, - format: "utf-8", - parser(text2) { - return configListParser(text2); - } - }; -} -function config_default() { - return { - addConfig(key2, value, ...rest) { - return this._runTask(addConfigTask(key2, value, rest[0] === true, asConfigScope( - rest[1], - "local" - /* local */ - )), trailingFunctionArgument(arguments)); - }, - getConfig(key2, scope) { - return this._runTask(getConfigTask(key2, asConfigScope(scope, void 0)), trailingFunctionArgument(arguments)); - }, - listConfig(...rest) { - return this._runTask(listConfigTask(asConfigScope(rest[0], void 0)), trailingFunctionArgument(arguments)); - } - }; -} -var GitConfigScope; -var init_config = __esm2({ - "src/lib/tasks/config.ts"() { - init_ConfigList(); - init_utils(); - GitConfigScope = /* @__PURE__ */ ((GitConfigScope2) => { - GitConfigScope2["system"] = "system"; - GitConfigScope2["global"] = "global"; - GitConfigScope2["local"] = "local"; - GitConfigScope2["worktree"] = "worktree"; - return GitConfigScope2; - })(GitConfigScope || {}); - } -}); -function grepQueryBuilder(...params) { - return new GrepQuery().param(...params); -} -function parseGrep(grep) { - const paths = /* @__PURE__ */ new Set(); - const results = {}; - forEachLineWithContent(grep, (input) => { - const [path2, line, preview] = input.split(NULL); - paths.add(path2); - (results[path2] = results[path2] || []).push({ - line: asNumber(line), - path: path2, - preview - }); - }); - return { - paths, - results - }; -} -function grep_default() { - return { - grep(searchTerm) { - const then = trailingFunctionArgument(arguments); - const options = getTrailingOptions(arguments); - for (const option of disallowedOptions) { - if (options.includes(option)) { - return this._runTask(configurationErrorTask(`git.grep: use of "${option}" is not supported.`), then); - } - } - if (typeof searchTerm === "string") { - searchTerm = grepQueryBuilder().param(searchTerm); - } - const commands2 = ["grep", "--null", "-n", "--full-name", ...options, ...searchTerm]; - return this._runTask({ - commands: commands2, - format: "utf-8", - parser(stdOut) { - return parseGrep(stdOut); - } - }, then); - } - }; -} -var disallowedOptions; -var Query; -var _a; -var GrepQuery; -var init_grep = __esm2({ - "src/lib/tasks/grep.ts"() { - init_utils(); - init_task(); - disallowedOptions = ["-h"]; - Query = Symbol("grepQuery"); - GrepQuery = class { - constructor() { - this[_a] = []; - } - *[(_a = Query, Symbol.iterator)]() { - for (const query of this[Query]) { - yield query; - } - } - and(...and) { - and.length && this[Query].push("--and", "(", ...prefixedArray(and, "-e"), ")"); - return this; - } - param(...param) { - this[Query].push(...prefixedArray(param, "-e")); - return this; - } - }; - } -}); -var reset_exports = {}; -__export2(reset_exports, { - ResetMode: () => ResetMode, - getResetMode: () => getResetMode, - resetTask: () => resetTask -}); -function resetTask(mode, customArgs) { - const commands2 = ["reset"]; - if (isValidResetMode(mode)) { - commands2.push(`--${mode}`); - } - commands2.push(...customArgs); - return straightThroughStringTask(commands2); -} -function getResetMode(mode) { - if (isValidResetMode(mode)) { - return mode; - } - switch (typeof mode) { - case "string": - case "undefined": - return "soft"; - } - return; -} -function isValidResetMode(mode) { - return ResetModes.includes(mode); -} -var ResetMode; -var ResetModes; -var init_reset = __esm2({ - "src/lib/tasks/reset.ts"() { - init_task(); - ResetMode = /* @__PURE__ */ ((ResetMode2) => { - ResetMode2["MIXED"] = "mixed"; - ResetMode2["SOFT"] = "soft"; - ResetMode2["HARD"] = "hard"; - ResetMode2["MERGE"] = "merge"; - ResetMode2["KEEP"] = "keep"; - return ResetMode2; - })(ResetMode || {}); - ResetModes = Array.from(Object.values(ResetMode)); - } -}); -function createLog() { - return (0, import_debug.default)("simple-git"); -} -function prefixedLogger(to, prefix, forward) { - if (!prefix || !String(prefix).replace(/\s*/, "")) { - return !forward ? to : (message, ...args) => { - to(message, ...args); - forward(message, ...args); - }; - } - return (message, ...args) => { - to(`%s ${message}`, prefix, ...args); - if (forward) { - forward(message, ...args); - } - }; -} -function childLoggerName(name, childDebugger, { namespace: parentNamespace }) { - if (typeof name === "string") { - return name; - } - const childNamespace = childDebugger && childDebugger.namespace || ""; - if (childNamespace.startsWith(parentNamespace)) { - return childNamespace.substr(parentNamespace.length + 1); - } - return childNamespace || parentNamespace; -} -function createLogger(label, verbose, initialStep, infoDebugger = createLog()) { - const labelPrefix = label && `[${label}]` || ""; - const spawned = []; - const debugDebugger = typeof verbose === "string" ? infoDebugger.extend(verbose) : verbose; - const key2 = childLoggerName(filterType(verbose, filterString), debugDebugger, infoDebugger); - return step(initialStep); - function sibling(name, initial) { - return append(spawned, createLogger(label, key2.replace(/^[^:]+/, name), initial, infoDebugger)); - } - function step(phase) { - const stepPrefix = phase && `[${phase}]` || ""; - const debug22 = debugDebugger && prefixedLogger(debugDebugger, stepPrefix) || NOOP; - const info = prefixedLogger(infoDebugger, `${labelPrefix} ${stepPrefix}`, debug22); - return Object.assign(debugDebugger ? debug22 : info, { - label, - sibling, - info, - step - }); - } -} -var init_git_logger = __esm2({ - "src/lib/git-logger.ts"() { - init_utils(); - import_debug.default.formatters.L = (value) => String(filterHasLength(value) ? value.length : "-"); - import_debug.default.formatters.B = (value) => { - if (Buffer.isBuffer(value)) { - return value.toString("utf8"); - } - return objectToString(value); - }; - } -}); -var _TasksPendingQueue; -var TasksPendingQueue; -var init_tasks_pending_queue = __esm2({ - "src/lib/runners/tasks-pending-queue.ts"() { - init_git_error(); - init_git_logger(); - _TasksPendingQueue = class { - constructor(logLabel = "GitExecutor") { - this.logLabel = logLabel; - this._queue = /* @__PURE__ */ new Map(); - } - withProgress(task) { - return this._queue.get(task); - } - createProgress(task) { - const name = _TasksPendingQueue.getName(task.commands[0]); - const logger = createLogger(this.logLabel, name); - return { - task, - logger, - name - }; - } - push(task) { - const progress = this.createProgress(task); - progress.logger("Adding task to the queue, commands = %o", task.commands); - this._queue.set(task, progress); - return progress; - } - fatal(err) { - for (const [task, { logger }] of Array.from(this._queue.entries())) { - if (task === err.task) { - logger.info(`Failed %o`, err); - logger(`Fatal exception, any as-yet un-started tasks run through this executor will not be attempted`); - } else { - logger.info(`A fatal exception occurred in a previous task, the queue has been purged: %o`, err.message); - } - this.complete(task); - } - if (this._queue.size !== 0) { - throw new Error(`Queue size should be zero after fatal: ${this._queue.size}`); - } - } - complete(task) { - const progress = this.withProgress(task); - if (progress) { - this._queue.delete(task); - } - } - attempt(task) { - const progress = this.withProgress(task); - if (!progress) { - throw new GitError(void 0, "TasksPendingQueue: attempt called for an unknown task"); - } - progress.logger("Starting task"); - return progress; - } - static getName(name = "empty") { - return `task:${name}:${++_TasksPendingQueue.counter}`; - } - }; - TasksPendingQueue = _TasksPendingQueue; - TasksPendingQueue.counter = 0; - } -}); -function pluginContext(task, commands2) { - return { - method: first(task.commands) || "", - commands: commands2 - }; -} -function onErrorReceived(target, logger) { - return (err) => { - logger(`[ERROR] child process exception %o`, err); - target.push(Buffer.from(String(err.stack), "ascii")); - }; -} -function onDataReceived(target, name, logger, output) { - return (buffer2) => { - logger(`%s received %L bytes`, name, buffer2); - output(`%B`, buffer2); - target.push(buffer2); - }; -} -var GitExecutorChain; -var init_git_executor_chain = __esm2({ - "src/lib/runners/git-executor-chain.ts"() { - init_git_error(); - init_task(); - init_utils(); - init_tasks_pending_queue(); - GitExecutorChain = class { - constructor(_executor, _scheduler, _plugins) { - this._executor = _executor; - this._scheduler = _scheduler; - this._plugins = _plugins; - this._chain = Promise.resolve(); - this._queue = new TasksPendingQueue(); - } - get binary() { - return this._executor.binary; - } - get cwd() { - return this._cwd || this._executor.cwd; - } - set cwd(cwd) { - this._cwd = cwd; - } - get env() { - return this._executor.env; - } - get outputHandler() { - return this._executor.outputHandler; - } - chain() { - return this; - } - push(task) { - this._queue.push(task); - return this._chain = this._chain.then(() => this.attemptTask(task)); - } - attemptTask(task) { - return __async(this, null, function* () { - const onScheduleComplete = yield this._scheduler.next(); - const onQueueComplete = () => this._queue.complete(task); - try { - const { logger } = this._queue.attempt(task); - return yield isEmptyTask(task) ? this.attemptEmptyTask(task, logger) : this.attemptRemoteTask(task, logger); - } catch (e) { - throw this.onFatalException(task, e); - } finally { - onQueueComplete(); - onScheduleComplete(); - } - }); - } - onFatalException(task, e) { - const gitError = e instanceof GitError ? Object.assign(e, { task }) : new GitError(task, e && String(e)); - this._chain = Promise.resolve(); - this._queue.fatal(gitError); - return gitError; - } - attemptRemoteTask(task, logger) { - return __async(this, null, function* () { - const args = this._plugins.exec("spawn.args", [...task.commands], pluginContext(task, task.commands)); - const raw = yield this.gitResponse(task, this.binary, args, this.outputHandler, logger.step("SPAWN")); - const outputStreams = yield this.handleTaskData(task, args, raw, logger.step("HANDLE")); - logger(`passing response to task's parser as a %s`, task.format); - if (isBufferTask(task)) { - return callTaskParser(task.parser, outputStreams); - } - return callTaskParser(task.parser, outputStreams.asStrings()); - }); - } - attemptEmptyTask(task, logger) { - return __async(this, null, function* () { - logger(`empty task bypassing child process to call to task's parser`); - return task.parser(this); - }); - } - handleTaskData(task, args, result, logger) { - const { exitCode, rejection, stdOut, stdErr } = result; - return new Promise((done, fail) => { - logger(`Preparing to handle process response exitCode=%d stdOut=`, exitCode); - const { error } = this._plugins.exec("task.error", { error: rejection }, __spreadValues(__spreadValues({}, pluginContext(task, args)), result)); - if (error && task.onError) { - logger.info(`exitCode=%s handling with custom error handler`); - return task.onError(result, error, (newStdOut) => { - logger.info(`custom error handler treated as success`); - logger(`custom error returned a %s`, objectToString(newStdOut)); - done(new GitOutputStreams(Array.isArray(newStdOut) ? Buffer.concat(newStdOut) : newStdOut, Buffer.concat(stdErr))); - }, fail); - } - if (error) { - logger.info(`handling as error: exitCode=%s stdErr=%s rejection=%o`, exitCode, stdErr.length, rejection); - return fail(error); - } - logger.info(`retrieving task output complete`); - done(new GitOutputStreams(Buffer.concat(stdOut), Buffer.concat(stdErr))); - }); - } - gitResponse(task, command, args, outputHandler, logger) { - return __async(this, null, function* () { - const outputLogger = logger.sibling("output"); - const spawnOptions = this._plugins.exec("spawn.options", { - cwd: this.cwd, - env: this.env, - windowsHide: true - }, pluginContext(task, task.commands)); - return new Promise((done) => { - const stdOut = []; - const stdErr = []; - logger.info(`%s %o`, command, args); - logger("%O", spawnOptions); - let rejection = this._beforeSpawn(task, args); - if (rejection) { - return done({ - stdOut, - stdErr, - exitCode: 9901, - rejection - }); - } - this._plugins.exec("spawn.before", void 0, __spreadProps(__spreadValues({}, pluginContext(task, args)), { - kill(reason) { - rejection = reason || rejection; - } - })); - const spawned = (0, import_child_process.spawn)(command, args, spawnOptions); - spawned.stdout.on("data", onDataReceived(stdOut, "stdOut", logger, outputLogger.step("stdOut"))); - spawned.stderr.on("data", onDataReceived(stdErr, "stdErr", logger, outputLogger.step("stdErr"))); - spawned.on("error", onErrorReceived(stdErr, logger)); - if (outputHandler) { - logger(`Passing child process stdOut/stdErr to custom outputHandler`); - outputHandler(command, spawned.stdout, spawned.stderr, [...args]); - } - this._plugins.exec("spawn.after", void 0, __spreadProps(__spreadValues({}, pluginContext(task, args)), { - spawned, - close(exitCode, reason) { - done({ - stdOut, - stdErr, - exitCode, - rejection: rejection || reason - }); - }, - kill(reason) { - if (spawned.killed) { - return; - } - rejection = reason; - spawned.kill("SIGINT"); - } - })); - }); - }); - } - _beforeSpawn(task, args) { - let rejection; - this._plugins.exec("spawn.before", void 0, __spreadProps(__spreadValues({}, pluginContext(task, args)), { - kill(reason) { - rejection = reason || rejection; - } - })); - return rejection; - } - }; - } -}); -var git_executor_exports = {}; -__export2(git_executor_exports, { - GitExecutor: () => GitExecutor -}); -var GitExecutor; -var init_git_executor = __esm2({ - "src/lib/runners/git-executor.ts"() { - init_git_executor_chain(); - GitExecutor = class { - constructor(binary = "git", cwd, _scheduler, _plugins) { - this.binary = binary; - this.cwd = cwd; - this._scheduler = _scheduler; - this._plugins = _plugins; - this._chain = new GitExecutorChain(this, this._scheduler, this._plugins); - } - chain() { - return new GitExecutorChain(this, this._scheduler, this._plugins); - } - push(task) { - return this._chain.push(task); - } - }; - } -}); -function taskCallback(task, response, callback = NOOP) { - const onSuccess = (data) => { - callback(null, data); - }; - const onError2 = (err) => { - if ((err == null ? void 0 : err.task) === task) { - callback(err instanceof GitResponseError ? addDeprecationNoticeToError(err) : err, void 0); - } - }; - response.then(onSuccess, onError2); -} -function addDeprecationNoticeToError(err) { - let log2 = (name) => { - console.warn(`simple-git deprecation notice: accessing GitResponseError.${name} should be GitResponseError.git.${name}, this will no longer be available in version 3`); - log2 = NOOP; - }; - return Object.create(err, Object.getOwnPropertyNames(err.git).reduce(descriptorReducer, {})); - function descriptorReducer(all, name) { - if (name in err) { - return all; - } - all[name] = { - enumerable: false, - configurable: false, - get() { - log2(name); - return err.git[name]; - } - }; - return all; - } -} -var init_task_callback = __esm2({ - "src/lib/task-callback.ts"() { - init_git_response_error(); - init_utils(); - } -}); -function changeWorkingDirectoryTask(directory, root2) { - return adhocExecTask((instance10) => { - if (!folderExists(directory)) { - throw new Error(`Git.cwd: cannot change to non-directory "${directory}"`); - } - return (root2 || instance10).cwd = directory; - }); -} -var init_change_working_directory = __esm2({ - "src/lib/tasks/change-working-directory.ts"() { - init_utils(); - init_task(); - } -}); -function checkoutTask(args) { - const commands2 = ["checkout", ...args]; - if (commands2[1] === "-b" && commands2.includes("-B")) { - commands2[1] = remove2(commands2, "-B"); - } - return straightThroughStringTask(commands2); -} -function checkout_default() { - return { - checkout() { - return this._runTask(checkoutTask(getTrailingOptions(arguments, 1)), trailingFunctionArgument(arguments)); - }, - checkoutBranch(branchName, startPoint) { - return this._runTask(checkoutTask(["-b", branchName, startPoint, ...getTrailingOptions(arguments)]), trailingFunctionArgument(arguments)); - }, - checkoutLocalBranch(branchName) { - return this._runTask(checkoutTask(["-b", branchName, ...getTrailingOptions(arguments)]), trailingFunctionArgument(arguments)); - } - }; -} -var init_checkout = __esm2({ - "src/lib/tasks/checkout.ts"() { - init_utils(); - init_task(); - } -}); -function parseCommitResult(stdOut) { - const result = { - author: null, - branch: "", - commit: "", - root: false, - summary: { - changes: 0, - insertions: 0, - deletions: 0 - } - }; - return parseStringResponse(result, parsers, stdOut); -} -var parsers; -var init_parse_commit = __esm2({ - "src/lib/parsers/parse-commit.ts"() { - init_utils(); - parsers = [ - new LineParser(/^\[([^\s]+)( \([^)]+\))? ([^\]]+)/, (result, [branch2, root2, commit2]) => { - result.branch = branch2; - result.commit = commit2; - result.root = !!root2; - }), - new LineParser(/\s*Author:\s(.+)/i, (result, [author]) => { - const parts = author.split("<"); - const email = parts.pop(); - if (!email || !email.includes("@")) { - return; - } - result.author = { - email: email.substr(0, email.length - 1), - name: parts.join("<").trim() - }; - }), - new LineParser(/(\d+)[^,]*(?:,\s*(\d+)[^,]*)(?:,\s*(\d+))/g, (result, [changes, insertions, deletions]) => { - result.summary.changes = parseInt(changes, 10) || 0; - result.summary.insertions = parseInt(insertions, 10) || 0; - result.summary.deletions = parseInt(deletions, 10) || 0; - }), - new LineParser(/^(\d+)[^,]*(?:,\s*(\d+)[^(]+\(([+-]))?/, (result, [changes, lines, direction]) => { - result.summary.changes = parseInt(changes, 10) || 0; - const count = parseInt(lines, 10) || 0; - if (direction === "-") { - result.summary.deletions = count; - } else if (direction === "+") { - result.summary.insertions = count; - } - }) - ]; - } -}); -function commitTask(message, files, customArgs) { - const commands2 = [ - "-c", - "core.abbrev=40", - "commit", - ...prefixedArray(message, "-m"), - ...files, - ...customArgs - ]; - return { - commands: commands2, - format: "utf-8", - parser: parseCommitResult - }; -} -function commit_default() { - return { - commit(message, ...rest) { - const next = trailingFunctionArgument(arguments); - const task = rejectDeprecatedSignatures(message) || commitTask(asArray(message), asArray(filterType(rest[0], filterStringOrStringArray, [])), [...filterType(rest[1], filterArray, []), ...getTrailingOptions(arguments, 0, true)]); - return this._runTask(task, next); - } - }; - function rejectDeprecatedSignatures(message) { - return !filterStringOrStringArray(message) && configurationErrorTask(`git.commit: requires the commit message to be supplied as a string/string[]`); - } -} -var init_commit = __esm2({ - "src/lib/tasks/commit.ts"() { - init_parse_commit(); - init_utils(); - init_task(); - } -}); -function hashObjectTask(filePath, write) { - const commands2 = ["hash-object", filePath]; - if (write) { - commands2.push("-w"); - } - return straightThroughStringTask(commands2, true); -} -var init_hash_object = __esm2({ - "src/lib/tasks/hash-object.ts"() { - init_task(); - } -}); -function parseInit(bare, path2, text2) { - const response = String(text2).trim(); - let result; - if (result = initResponseRegex.exec(response)) { - return new InitSummary(bare, path2, false, result[1]); - } - if (result = reInitResponseRegex.exec(response)) { - return new InitSummary(bare, path2, true, result[1]); - } - let gitDir = ""; - const tokens = response.split(" "); - while (tokens.length) { - const token = tokens.shift(); - if (token === "in") { - gitDir = tokens.join(" "); - break; - } - } - return new InitSummary(bare, path2, /^re/i.test(response), gitDir); -} -var InitSummary; -var initResponseRegex; -var reInitResponseRegex; -var init_InitSummary = __esm2({ - "src/lib/responses/InitSummary.ts"() { - InitSummary = class { - constructor(bare, path2, existing, gitDir) { - this.bare = bare; - this.path = path2; - this.existing = existing; - this.gitDir = gitDir; - } - }; - initResponseRegex = /^Init.+ repository in (.+)$/; - reInitResponseRegex = /^Rein.+ in (.+)$/; - } -}); -function hasBareCommand(command) { - return command.includes(bareCommand); -} -function initTask(bare = false, path2, customArgs) { - const commands2 = ["init", ...customArgs]; - if (bare && !hasBareCommand(commands2)) { - commands2.splice(1, 0, bareCommand); - } - return { - commands: commands2, - format: "utf-8", - parser(text2) { - return parseInit(commands2.includes("--bare"), path2, text2); - } - }; -} -var bareCommand; -var init_init = __esm2({ - "src/lib/tasks/init.ts"() { - init_InitSummary(); - bareCommand = "--bare"; - } -}); -function logFormatFromCommand(customArgs) { - for (let i = 0; i < customArgs.length; i++) { - const format = logFormatRegex.exec(customArgs[i]); - if (format) { - return `--${format[1]}`; - } - } - return ""; -} -function isLogFormat(customArg) { - return logFormatRegex.test(customArg); -} -var logFormatRegex; -var init_log_format = __esm2({ - "src/lib/args/log-format.ts"() { - logFormatRegex = /^--(stat|numstat|name-only|name-status)(=|$)/; - } -}); -var DiffSummary; -var init_DiffSummary = __esm2({ - "src/lib/responses/DiffSummary.ts"() { - DiffSummary = class { - constructor() { - this.changed = 0; - this.deletions = 0; - this.insertions = 0; - this.files = []; - } - }; - } -}); -function getDiffParser(format = "") { - const parser3 = diffSummaryParsers[format]; - return (stdOut) => parseStringResponse(new DiffSummary(), parser3, stdOut, false); -} -var statParser; -var numStatParser; -var nameOnlyParser; -var nameStatusParser; -var diffSummaryParsers; -var init_parse_diff_summary = __esm2({ - "src/lib/parsers/parse-diff-summary.ts"() { - init_log_format(); - init_DiffSummary(); - init_utils(); - statParser = [ - new LineParser(/(.+)\s+\|\s+(\d+)(\s+[+\-]+)?$/, (result, [file, changes, alterations = ""]) => { - result.files.push({ - file: file.trim(), - changes: asNumber(changes), - insertions: alterations.replace(/[^+]/g, "").length, - deletions: alterations.replace(/[^-]/g, "").length, - binary: false - }); - }), - new LineParser(/(.+) \|\s+Bin ([0-9.]+) -> ([0-9.]+) ([a-z]+)/, (result, [file, before, after]) => { - result.files.push({ - file: file.trim(), - before: asNumber(before), - after: asNumber(after), - binary: true - }); - }), - new LineParser(/(\d+) files? changed\s*((?:, \d+ [^,]+){0,2})/, (result, [changed, summary]) => { - const inserted = /(\d+) i/.exec(summary); - const deleted = /(\d+) d/.exec(summary); - result.changed = asNumber(changed); - result.insertions = asNumber(inserted == null ? void 0 : inserted[1]); - result.deletions = asNumber(deleted == null ? void 0 : deleted[1]); - }) - ]; - numStatParser = [ - new LineParser(/(\d+)\t(\d+)\t(.+)$/, (result, [changesInsert, changesDelete, file]) => { - const insertions = asNumber(changesInsert); - const deletions = asNumber(changesDelete); - result.changed++; - result.insertions += insertions; - result.deletions += deletions; - result.files.push({ - file, - changes: insertions + deletions, - insertions, - deletions, - binary: false - }); - }), - new LineParser(/-\t-\t(.+)$/, (result, [file]) => { - result.changed++; - result.files.push({ - file, - after: 0, - before: 0, - binary: true - }); - }) - ]; - nameOnlyParser = [ - new LineParser(/(.+)$/, (result, [file]) => { - result.changed++; - result.files.push({ - file, - changes: 0, - insertions: 0, - deletions: 0, - binary: false - }); - }) - ]; - nameStatusParser = [ - new LineParser(/([ACDMRTUXB])([0-9][0-9][0-9])?\t(.[^\t]+)\t?(.*)?$/, (result, [status2, _similarity, from, to]) => { - result.changed++; - result.files.push({ - file: to != null ? to : from, - changes: 0, - status: status2, - insertions: 0, - deletions: 0, - binary: false - }); - }) - ]; - diffSummaryParsers = { - [ - "" - /* NONE */ - ]: statParser, - [ - "--stat" - /* STAT */ - ]: statParser, - [ - "--numstat" - /* NUM_STAT */ - ]: numStatParser, - [ - "--name-status" - /* NAME_STATUS */ - ]: nameStatusParser, - [ - "--name-only" - /* NAME_ONLY */ - ]: nameOnlyParser - }; - } -}); -function lineBuilder(tokens, fields) { - return fields.reduce((line, field, index2) => { - line[field] = tokens[index2] || ""; - return line; - }, /* @__PURE__ */ Object.create({ diff: null })); -} -function createListLogSummaryParser(splitter = SPLITTER, fields = defaultFieldNames, logFormat = "") { - const parseDiffResult = getDiffParser(logFormat); - return function(stdOut) { - const all = toLinesWithContent(stdOut, true, START_BOUNDARY).map(function(item) { - const lineDetail = item.trim().split(COMMIT_BOUNDARY); - const listLogLine = lineBuilder(lineDetail[0].trim().split(splitter), fields); - if (lineDetail.length > 1 && !!lineDetail[1].trim()) { - listLogLine.diff = parseDiffResult(lineDetail[1]); - } - return listLogLine; - }); - return { - all, - latest: all.length && all[0] || null, - total: all.length - }; - }; -} -var START_BOUNDARY; -var COMMIT_BOUNDARY; -var SPLITTER; -var defaultFieldNames; -var init_parse_list_log_summary = __esm2({ - "src/lib/parsers/parse-list-log-summary.ts"() { - init_utils(); - init_parse_diff_summary(); - init_log_format(); - START_BOUNDARY = "\xF2\xF2\xF2\xF2\xF2\xF2 "; - COMMIT_BOUNDARY = " \xF2\xF2"; - SPLITTER = " \xF2 "; - defaultFieldNames = ["hash", "date", "message", "refs", "author_name", "author_email"]; - } -}); -var diff_exports = {}; -__export2(diff_exports, { - diffSummaryTask: () => diffSummaryTask, - validateLogFormatConfig: () => validateLogFormatConfig -}); -function diffSummaryTask(customArgs) { - let logFormat = logFormatFromCommand(customArgs); - const commands2 = ["diff"]; - if (logFormat === "") { - logFormat = "--stat"; - commands2.push("--stat=4096"); - } - commands2.push(...customArgs); - return validateLogFormatConfig(commands2) || { - commands: commands2, - format: "utf-8", - parser: getDiffParser(logFormat) - }; -} -function validateLogFormatConfig(customArgs) { - const flags = customArgs.filter(isLogFormat); - if (flags.length > 1) { - return configurationErrorTask(`Summary flags are mutually exclusive - pick one of ${flags.join(",")}`); - } - if (flags.length && customArgs.includes("-z")) { - return configurationErrorTask(`Summary flag ${flags} parsing is not compatible with null termination option '-z'`); - } -} -var init_diff = __esm2({ - "src/lib/tasks/diff.ts"() { - init_log_format(); - init_parse_diff_summary(); - init_task(); - } -}); -function prettyFormat(format, splitter) { - const fields = []; - const formatStr = []; - Object.keys(format).forEach((field) => { - fields.push(field); - formatStr.push(String(format[field])); - }); - return [fields, formatStr.join(splitter)]; -} -function userOptions(input) { - return Object.keys(input).reduce((out, key2) => { - if (!(key2 in excludeOptions)) { - out[key2] = input[key2]; - } - return out; - }, {}); -} -function parseLogOptions(opt = {}, customArgs = []) { - const splitter = filterType(opt.splitter, filterString, SPLITTER); - const format = !filterPrimitives(opt.format) && opt.format ? opt.format : { - hash: "%H", - date: opt.strictDate === false ? "%ai" : "%aI", - message: "%s", - refs: "%D", - body: opt.multiLine ? "%B" : "%b", - author_name: opt.mailMap !== false ? "%aN" : "%an", - author_email: opt.mailMap !== false ? "%aE" : "%ae" - }; - const [fields, formatStr] = prettyFormat(format, splitter); - const suffix = []; - const command = [ - `--pretty=format:${START_BOUNDARY}${formatStr}${COMMIT_BOUNDARY}`, - ...customArgs - ]; - const maxCount = opt.n || opt["max-count"] || opt.maxCount; - if (maxCount) { - command.push(`--max-count=${maxCount}`); - } - if (opt.from || opt.to) { - const rangeOperator = opt.symmetric !== false ? "..." : ".."; - suffix.push(`${opt.from || ""}${rangeOperator}${opt.to || ""}`); - } - if (filterString(opt.file)) { - suffix.push("--follow", opt.file); - } - appendTaskOptions(userOptions(opt), command); - return { - fields, - splitter, - commands: [...command, ...suffix] - }; -} -function logTask(splitter, fields, customArgs) { - const parser3 = createListLogSummaryParser(splitter, fields, logFormatFromCommand(customArgs)); - return { - commands: ["log", ...customArgs], - format: "utf-8", - parser: parser3 - }; -} -function log_default() { - return { - log(...rest) { - const next = trailingFunctionArgument(arguments); - const options = parseLogOptions(trailingOptionsArgument(arguments), filterType(arguments[0], filterArray)); - const task = rejectDeprecatedSignatures(...rest) || validateLogFormatConfig(options.commands) || createLogTask(options); - return this._runTask(task, next); - } - }; - function createLogTask(options) { - return logTask(options.splitter, options.fields, options.commands); - } - function rejectDeprecatedSignatures(from, to) { - return filterString(from) && filterString(to) && configurationErrorTask(`git.log(string, string) should be replaced with git.log({ from: string, to: string })`); - } -} -var excludeOptions; -var init_log = __esm2({ - "src/lib/tasks/log.ts"() { - init_log_format(); - init_parse_list_log_summary(); - init_utils(); - init_task(); - init_diff(); - excludeOptions = /* @__PURE__ */ ((excludeOptions2) => { - excludeOptions2[excludeOptions2["--pretty"] = 0] = "--pretty"; - excludeOptions2[excludeOptions2["max-count"] = 1] = "max-count"; - excludeOptions2[excludeOptions2["maxCount"] = 2] = "maxCount"; - excludeOptions2[excludeOptions2["n"] = 3] = "n"; - excludeOptions2[excludeOptions2["file"] = 4] = "file"; - excludeOptions2[excludeOptions2["format"] = 5] = "format"; - excludeOptions2[excludeOptions2["from"] = 6] = "from"; - excludeOptions2[excludeOptions2["to"] = 7] = "to"; - excludeOptions2[excludeOptions2["splitter"] = 8] = "splitter"; - excludeOptions2[excludeOptions2["symmetric"] = 9] = "symmetric"; - excludeOptions2[excludeOptions2["mailMap"] = 10] = "mailMap"; - excludeOptions2[excludeOptions2["multiLine"] = 11] = "multiLine"; - excludeOptions2[excludeOptions2["strictDate"] = 12] = "strictDate"; - return excludeOptions2; - })(excludeOptions || {}); - } -}); -var MergeSummaryConflict; -var MergeSummaryDetail; -var init_MergeSummary = __esm2({ - "src/lib/responses/MergeSummary.ts"() { - MergeSummaryConflict = class { - constructor(reason, file = null, meta) { - this.reason = reason; - this.file = file; - this.meta = meta; - } - toString() { - return `${this.file}:${this.reason}`; - } - }; - MergeSummaryDetail = class { - constructor() { - this.conflicts = []; - this.merges = []; - this.result = "success"; - } - get failed() { - return this.conflicts.length > 0; - } - get reason() { - return this.result; - } - toString() { - if (this.conflicts.length) { - return `CONFLICTS: ${this.conflicts.join(", ")}`; - } - return "OK"; - } - }; - } -}); -var PullSummary; -var PullFailedSummary; -var init_PullSummary = __esm2({ - "src/lib/responses/PullSummary.ts"() { - PullSummary = class { - constructor() { - this.remoteMessages = { - all: [] - }; - this.created = []; - this.deleted = []; - this.files = []; - this.deletions = {}; - this.insertions = {}; - this.summary = { - changes: 0, - deletions: 0, - insertions: 0 - }; - } - }; - PullFailedSummary = class { - constructor() { - this.remote = ""; - this.hash = { - local: "", - remote: "" - }; - this.branch = { - local: "", - remote: "" - }; - this.message = ""; - } - toString() { - return this.message; - } - }; - } -}); -function objectEnumerationResult(remoteMessages) { - return remoteMessages.objects = remoteMessages.objects || { - compressing: 0, - counting: 0, - enumerating: 0, - packReused: 0, - reused: { count: 0, delta: 0 }, - total: { count: 0, delta: 0 } - }; -} -function asObjectCount(source) { - const count = /^\s*(\d+)/.exec(source); - const delta = /delta (\d+)/i.exec(source); - return { - count: asNumber(count && count[1] || "0"), - delta: asNumber(delta && delta[1] || "0") - }; -} -var remoteMessagesObjectParsers; -var init_parse_remote_objects = __esm2({ - "src/lib/parsers/parse-remote-objects.ts"() { - init_utils(); - remoteMessagesObjectParsers = [ - new RemoteLineParser(/^remote:\s*(enumerating|counting|compressing) objects: (\d+),/i, (result, [action, count]) => { - const key2 = action.toLowerCase(); - const enumeration = objectEnumerationResult(result.remoteMessages); - Object.assign(enumeration, { [key2]: asNumber(count) }); - }), - new RemoteLineParser(/^remote:\s*(enumerating|counting|compressing) objects: \d+% \(\d+\/(\d+)\),/i, (result, [action, count]) => { - const key2 = action.toLowerCase(); - const enumeration = objectEnumerationResult(result.remoteMessages); - Object.assign(enumeration, { [key2]: asNumber(count) }); - }), - new RemoteLineParser(/total ([^,]+), reused ([^,]+), pack-reused (\d+)/i, (result, [total, reused, packReused]) => { - const objects = objectEnumerationResult(result.remoteMessages); - objects.total = asObjectCount(total); - objects.reused = asObjectCount(reused); - objects.packReused = asNumber(packReused); - }) - ]; - } -}); -function parseRemoteMessages(_stdOut, stdErr) { - return parseStringResponse({ remoteMessages: new RemoteMessageSummary() }, parsers2, stdErr); -} -var parsers2; -var RemoteMessageSummary; -var init_parse_remote_messages = __esm2({ - "src/lib/parsers/parse-remote-messages.ts"() { - init_utils(); - init_parse_remote_objects(); - parsers2 = [ - new RemoteLineParser(/^remote:\s*(.+)$/, (result, [text2]) => { - result.remoteMessages.all.push(text2.trim()); - return false; - }), - ...remoteMessagesObjectParsers, - new RemoteLineParser([/create a (?:pull|merge) request/i, /\s(https?:\/\/\S+)$/], (result, [pullRequestUrl]) => { - result.remoteMessages.pullRequestUrl = pullRequestUrl; - }), - new RemoteLineParser([/found (\d+) vulnerabilities.+\(([^)]+)\)/i, /\s(https?:\/\/\S+)$/], (result, [count, summary, url]) => { - result.remoteMessages.vulnerabilities = { - count: asNumber(count), - summary, - url - }; - }) - ]; - RemoteMessageSummary = class { - constructor() { - this.all = []; - } - }; - } -}); -function parsePullErrorResult(stdOut, stdErr) { - const pullError = parseStringResponse(new PullFailedSummary(), errorParsers, [stdOut, stdErr]); - return pullError.message && pullError; -} -var FILE_UPDATE_REGEX; -var SUMMARY_REGEX; -var ACTION_REGEX; -var parsers3; -var errorParsers; -var parsePullDetail; -var parsePullResult; -var init_parse_pull = __esm2({ - "src/lib/parsers/parse-pull.ts"() { - init_PullSummary(); - init_utils(); - init_parse_remote_messages(); - FILE_UPDATE_REGEX = /^\s*(.+?)\s+\|\s+\d+\s*(\+*)(-*)/; - SUMMARY_REGEX = /(\d+)\D+((\d+)\D+\(\+\))?(\D+(\d+)\D+\(-\))?/; - ACTION_REGEX = /^(create|delete) mode \d+ (.+)/; - parsers3 = [ - new LineParser(FILE_UPDATE_REGEX, (result, [file, insertions, deletions]) => { - result.files.push(file); - if (insertions) { - result.insertions[file] = insertions.length; - } - if (deletions) { - result.deletions[file] = deletions.length; - } - }), - new LineParser(SUMMARY_REGEX, (result, [changes, , insertions, , deletions]) => { - if (insertions !== void 0 || deletions !== void 0) { - result.summary.changes = +changes || 0; - result.summary.insertions = +insertions || 0; - result.summary.deletions = +deletions || 0; - return true; - } - return false; - }), - new LineParser(ACTION_REGEX, (result, [action, file]) => { - append(result.files, file); - append(action === "create" ? result.created : result.deleted, file); - }) - ]; - errorParsers = [ - new LineParser(/^from\s(.+)$/i, (result, [remote]) => void (result.remote = remote)), - new LineParser(/^fatal:\s(.+)$/, (result, [message]) => void (result.message = message)), - new LineParser(/([a-z0-9]+)\.\.([a-z0-9]+)\s+(\S+)\s+->\s+(\S+)$/, (result, [hashLocal, hashRemote, branchLocal, branchRemote]) => { - result.branch.local = branchLocal; - result.hash.local = hashLocal; - result.branch.remote = branchRemote; - result.hash.remote = hashRemote; - }) - ]; - parsePullDetail = (stdOut, stdErr) => { - return parseStringResponse(new PullSummary(), parsers3, [stdOut, stdErr]); - }; - parsePullResult = (stdOut, stdErr) => { - return Object.assign(new PullSummary(), parsePullDetail(stdOut, stdErr), parseRemoteMessages(stdOut, stdErr)); - }; - } -}); -var parsers4; -var parseMergeResult; -var parseMergeDetail; -var init_parse_merge = __esm2({ - "src/lib/parsers/parse-merge.ts"() { - init_MergeSummary(); - init_utils(); - init_parse_pull(); - parsers4 = [ - new LineParser(/^Auto-merging\s+(.+)$/, (summary, [autoMerge]) => { - summary.merges.push(autoMerge); - }), - new LineParser(/^CONFLICT\s+\((.+)\): Merge conflict in (.+)$/, (summary, [reason, file]) => { - summary.conflicts.push(new MergeSummaryConflict(reason, file)); - }), - new LineParser(/^CONFLICT\s+\((.+\/delete)\): (.+) deleted in (.+) and/, (summary, [reason, file, deleteRef2]) => { - summary.conflicts.push(new MergeSummaryConflict(reason, file, { deleteRef: deleteRef2 })); - }), - new LineParser(/^CONFLICT\s+\((.+)\):/, (summary, [reason]) => { - summary.conflicts.push(new MergeSummaryConflict(reason, null)); - }), - new LineParser(/^Automatic merge failed;\s+(.+)$/, (summary, [result]) => { - summary.result = result; - }) - ]; - parseMergeResult = (stdOut, stdErr) => { - return Object.assign(parseMergeDetail(stdOut, stdErr), parsePullResult(stdOut, stdErr)); - }; - parseMergeDetail = (stdOut) => { - return parseStringResponse(new MergeSummaryDetail(), parsers4, stdOut); - }; - } -}); -function mergeTask(customArgs) { - if (!customArgs.length) { - return configurationErrorTask("Git.merge requires at least one option"); - } - return { - commands: ["merge", ...customArgs], - format: "utf-8", - parser(stdOut, stdErr) { - const merge2 = parseMergeResult(stdOut, stdErr); - if (merge2.failed) { - throw new GitResponseError(merge2); - } - return merge2; - } - }; -} -var init_merge = __esm2({ - "src/lib/tasks/merge.ts"() { - init_git_response_error(); - init_parse_merge(); - init_task(); - } -}); -function pushResultPushedItem(local, remote, status2) { - const deleted = status2.includes("deleted"); - const tag2 = status2.includes("tag") || /^refs\/tags/.test(local); - const alreadyUpdated = !status2.includes("new"); - return { - deleted, - tag: tag2, - branch: !tag2, - new: !alreadyUpdated, - alreadyUpdated, - local, - remote - }; -} -var parsers5; -var parsePushResult; -var parsePushDetail; -var init_parse_push = __esm2({ - "src/lib/parsers/parse-push.ts"() { - init_utils(); - init_parse_remote_messages(); - parsers5 = [ - new LineParser(/^Pushing to (.+)$/, (result, [repo]) => { - result.repo = repo; - }), - new LineParser(/^updating local tracking ref '(.+)'/, (result, [local]) => { - result.ref = __spreadProps(__spreadValues({}, result.ref || {}), { - local - }); - }), - new LineParser(/^[=*-]\s+([^:]+):(\S+)\s+\[(.+)]$/, (result, [local, remote, type]) => { - result.pushed.push(pushResultPushedItem(local, remote, type)); - }), - new LineParser(/^Branch '([^']+)' set up to track remote branch '([^']+)' from '([^']+)'/, (result, [local, remote, remoteName]) => { - result.branch = __spreadProps(__spreadValues({}, result.branch || {}), { - local, - remote, - remoteName - }); - }), - new LineParser(/^([^:]+):(\S+)\s+([a-z0-9]+)\.\.([a-z0-9]+)$/, (result, [local, remote, from, to]) => { - result.update = { - head: { - local, - remote - }, - hash: { - from, - to - } - }; - }) - ]; - parsePushResult = (stdOut, stdErr) => { - const pushDetail = parsePushDetail(stdOut, stdErr); - const responseDetail = parseRemoteMessages(stdOut, stdErr); - return __spreadValues(__spreadValues({}, pushDetail), responseDetail); - }; - parsePushDetail = (stdOut, stdErr) => { - return parseStringResponse({ pushed: [] }, parsers5, [stdOut, stdErr]); - }; - } -}); -var push_exports = {}; -__export2(push_exports, { - pushTagsTask: () => pushTagsTask, - pushTask: () => pushTask -}); -function pushTagsTask(ref = {}, customArgs) { - append(customArgs, "--tags"); - return pushTask(ref, customArgs); -} -function pushTask(ref = {}, customArgs) { - const commands2 = ["push", ...customArgs]; - if (ref.branch) { - commands2.splice(1, 0, ref.branch); - } - if (ref.remote) { - commands2.splice(1, 0, ref.remote); - } - remove2(commands2, "-v"); - append(commands2, "--verbose"); - append(commands2, "--porcelain"); - return { - commands: commands2, - format: "utf-8", - parser: parsePushResult - }; -} -var init_push = __esm2({ - "src/lib/tasks/push.ts"() { - init_parse_push(); - init_utils(); - } -}); -var fromPathRegex; -var FileStatusSummary; -var init_FileStatusSummary = __esm2({ - "src/lib/responses/FileStatusSummary.ts"() { - fromPathRegex = /^(.+) -> (.+)$/; - FileStatusSummary = class { - constructor(path2, index2, working_dir) { - this.path = path2; - this.index = index2; - this.working_dir = working_dir; - if (index2 + working_dir === "R") { - const detail = fromPathRegex.exec(path2) || [null, path2, path2]; - this.from = detail[1] || ""; - this.path = detail[2] || ""; - } - } - }; - } -}); -function renamedFile(line) { - const [to, from] = line.split(NULL); - return { - from: from || to, - to - }; -} -function parser2(indexX, indexY, handler) { - return [`${indexX}${indexY}`, handler]; -} -function conflicts(indexX, ...indexY) { - return indexY.map((y) => parser2(indexX, y, (result, file) => append(result.conflicted, file))); -} -function splitLine(result, lineStr) { - const trimmed2 = lineStr.trim(); - switch (" ") { - case trimmed2.charAt(2): - return data(trimmed2.charAt(0), trimmed2.charAt(1), trimmed2.substr(3)); - case trimmed2.charAt(1): - return data(" ", trimmed2.charAt(0), trimmed2.substr(2)); - default: - return; - } - function data(index2, workingDir, path2) { - const raw = `${index2}${workingDir}`; - const handler = parsers6.get(raw); - if (handler) { - handler(result, path2); - } - if (raw !== "##" && raw !== "!!") { - result.files.push(new FileStatusSummary(path2.replace(/\0.+$/, ""), index2, workingDir)); - } - } -} -var StatusSummary; -var parsers6; -var parseStatusSummary; -var init_StatusSummary = __esm2({ - "src/lib/responses/StatusSummary.ts"() { - init_utils(); - init_FileStatusSummary(); - StatusSummary = class { - constructor() { - this.not_added = []; - this.conflicted = []; - this.created = []; - this.deleted = []; - this.ignored = void 0; - this.modified = []; - this.renamed = []; - this.files = []; - this.staged = []; - this.ahead = 0; - this.behind = 0; - this.current = null; - this.tracking = null; - this.detached = false; - this.isClean = () => { - return !this.files.length; - }; - } - }; - parsers6 = new Map([ - parser2(" ", "A", (result, file) => append(result.created, file)), - parser2(" ", "D", (result, file) => append(result.deleted, file)), - parser2(" ", "M", (result, file) => append(result.modified, file)), - parser2("A", " ", (result, file) => append(result.created, file) && append(result.staged, file)), - parser2("A", "M", (result, file) => append(result.created, file) && append(result.staged, file) && append(result.modified, file)), - parser2("D", " ", (result, file) => append(result.deleted, file) && append(result.staged, file)), - parser2("M", " ", (result, file) => append(result.modified, file) && append(result.staged, file)), - parser2("M", "M", (result, file) => append(result.modified, file) && append(result.staged, file)), - parser2("R", " ", (result, file) => { - append(result.renamed, renamedFile(file)); - }), - parser2("R", "M", (result, file) => { - const renamed = renamedFile(file); - append(result.renamed, renamed); - append(result.modified, renamed.to); - }), - parser2("!", "!", (_result, _file) => { - append(_result.ignored = _result.ignored || [], _file); - }), - parser2("?", "?", (result, file) => append(result.not_added, file)), - ...conflicts( - "A", - "A", - "U" - /* UNMERGED */ - ), - ...conflicts( - "D", - "D", - "U" - /* UNMERGED */ - ), - ...conflicts( - "U", - "A", - "D", - "U" - /* UNMERGED */ - ), - [ - "##", - (result, line) => { - const aheadReg = /ahead (\d+)/; - const behindReg = /behind (\d+)/; - const currentReg = /^(.+?(?=(?:\.{3}|\s|$)))/; - const trackingReg = /\.{3}(\S*)/; - const onEmptyBranchReg = /\son\s([\S]+)$/; - let regexResult; - regexResult = aheadReg.exec(line); - result.ahead = regexResult && +regexResult[1] || 0; - regexResult = behindReg.exec(line); - result.behind = regexResult && +regexResult[1] || 0; - regexResult = currentReg.exec(line); - result.current = regexResult && regexResult[1]; - regexResult = trackingReg.exec(line); - result.tracking = regexResult && regexResult[1]; - regexResult = onEmptyBranchReg.exec(line); - result.current = regexResult && regexResult[1] || result.current; - result.detached = /\(no branch\)/.test(line); - } - ] - ]); - parseStatusSummary = function(text2) { - const lines = text2.split(NULL); - const status2 = new StatusSummary(); - for (let i = 0, l = lines.length; i < l; ) { - let line = lines[i++].trim(); - if (!line) { - continue; - } - if (line.charAt(0) === "R") { - line += NULL + (lines[i++] || ""); - } - splitLine(status2, line); - } - return status2; - }; - } -}); -function statusTask(customArgs) { - const commands2 = [ - "status", - "--porcelain", - "-b", - "-u", - "--null", - ...customArgs.filter((arg) => !ignoredOptions.includes(arg)) - ]; - return { - format: "utf-8", - commands: commands2, - parser(text2) { - return parseStatusSummary(text2); - } - }; -} -var ignoredOptions; -var init_status = __esm2({ - "src/lib/tasks/status.ts"() { - init_StatusSummary(); - ignoredOptions = ["--null", "-z"]; - } -}); -function versionResponse(major = 0, minor = 0, patch = 0, agent = "", installed = true) { - return Object.defineProperty({ - major, - minor, - patch, - agent, - installed - }, "toString", { - value() { - return `${this.major}.${this.minor}.${this.patch}`; - }, - configurable: false, - enumerable: false - }); -} -function notInstalledResponse() { - return versionResponse(0, 0, 0, "", false); -} -function version_default() { - return { - version() { - return this._runTask({ - commands: ["--version"], - format: "utf-8", - parser: versionParser, - onError(result, error, done, fail) { - if (result.exitCode === -2) { - return done(Buffer.from(NOT_INSTALLED)); - } - fail(error); - } - }); - } - }; -} -function versionParser(stdOut) { - if (stdOut === NOT_INSTALLED) { - return notInstalledResponse(); - } - return parseStringResponse(versionResponse(0, 0, 0, stdOut), parsers7, stdOut); -} -var NOT_INSTALLED; -var parsers7; -var init_version = __esm2({ - "src/lib/tasks/version.ts"() { - init_utils(); - NOT_INSTALLED = "installed=false"; - parsers7 = [ - new LineParser(/version (\d+)\.(\d+)\.(\d+)(?:\s*\((.+)\))?/, (result, [major, minor, patch, agent = ""]) => { - Object.assign(result, versionResponse(asNumber(major), asNumber(minor), asNumber(patch), agent)); - }), - new LineParser(/version (\d+)\.(\d+)\.(\D+)(.+)?$/, (result, [major, minor, patch, agent = ""]) => { - Object.assign(result, versionResponse(asNumber(major), asNumber(minor), patch, agent)); - }) - ]; - } -}); -var simple_git_api_exports = {}; -__export2(simple_git_api_exports, { - SimpleGitApi: () => SimpleGitApi -}); -var SimpleGitApi; -var init_simple_git_api = __esm2({ - "src/lib/simple-git-api.ts"() { - init_task_callback(); - init_change_working_directory(); - init_checkout(); - init_commit(); - init_config(); - init_grep(); - init_hash_object(); - init_init(); - init_log(); - init_merge(); - init_push(); - init_status(); - init_task(); - init_version(); - init_utils(); - SimpleGitApi = class { - constructor(_executor) { - this._executor = _executor; - } - _runTask(task, then) { - const chain = this._executor.chain(); - const promise2 = chain.push(task); - if (then) { - taskCallback(task, promise2, then); - } - return Object.create(this, { - then: { value: promise2.then.bind(promise2) }, - catch: { value: promise2.catch.bind(promise2) }, - _executor: { value: chain } - }); - } - add(files) { - return this._runTask(straightThroughStringTask(["add", ...asArray(files)]), trailingFunctionArgument(arguments)); - } - cwd(directory) { - const next = trailingFunctionArgument(arguments); - if (typeof directory === "string") { - return this._runTask(changeWorkingDirectoryTask(directory, this._executor), next); - } - if (typeof (directory == null ? void 0 : directory.path) === "string") { - return this._runTask(changeWorkingDirectoryTask(directory.path, directory.root && this._executor || void 0), next); - } - return this._runTask(configurationErrorTask("Git.cwd: workingDirectory must be supplied as a string"), next); - } - hashObject(path2, write) { - return this._runTask(hashObjectTask(path2, write === true), trailingFunctionArgument(arguments)); - } - init(bare) { - return this._runTask(initTask(bare === true, this._executor.cwd, getTrailingOptions(arguments)), trailingFunctionArgument(arguments)); - } - merge() { - return this._runTask(mergeTask(getTrailingOptions(arguments)), trailingFunctionArgument(arguments)); - } - mergeFromTo(remote, branch2) { - if (!(filterString(remote) && filterString(branch2))) { - return this._runTask(configurationErrorTask(`Git.mergeFromTo requires that the 'remote' and 'branch' arguments are supplied as strings`)); - } - return this._runTask(mergeTask([remote, branch2, ...getTrailingOptions(arguments)]), trailingFunctionArgument(arguments, false)); - } - outputHandler(handler) { - this._executor.outputHandler = handler; - return this; - } - push() { - const task = pushTask({ - remote: filterType(arguments[0], filterString), - branch: filterType(arguments[1], filterString) - }, getTrailingOptions(arguments)); - return this._runTask(task, trailingFunctionArgument(arguments)); - } - stash() { - return this._runTask(straightThroughStringTask(["stash", ...getTrailingOptions(arguments)]), trailingFunctionArgument(arguments)); - } - status() { - return this._runTask(statusTask(getTrailingOptions(arguments)), trailingFunctionArgument(arguments)); - } - }; - Object.assign(SimpleGitApi.prototype, checkout_default(), commit_default(), config_default(), grep_default(), log_default(), version_default()); - } -}); -var scheduler_exports = {}; -__export2(scheduler_exports, { - Scheduler: () => Scheduler -}); -var createScheduledTask; -var Scheduler; -var init_scheduler = __esm2({ - "src/lib/runners/scheduler.ts"() { - init_utils(); - init_git_logger(); - createScheduledTask = /* @__PURE__ */ (() => { - let id = 0; - return () => { - id++; - const { promise: promise2, done } = (0, import_promise_deferred.createDeferred)(); - return { - promise: promise2, - done, - id - }; - }; - })(); - Scheduler = class { - constructor(concurrency = 2) { - this.concurrency = concurrency; - this.logger = createLogger("", "scheduler"); - this.pending = []; - this.running = []; - this.logger(`Constructed, concurrency=%s`, concurrency); - } - schedule() { - if (!this.pending.length || this.running.length >= this.concurrency) { - this.logger(`Schedule attempt ignored, pending=%s running=%s concurrency=%s`, this.pending.length, this.running.length, this.concurrency); - return; - } - const task = append(this.running, this.pending.shift()); - this.logger(`Attempting id=%s`, task.id); - task.done(() => { - this.logger(`Completing id=`, task.id); - remove2(this.running, task); - this.schedule(); - }); - } - next() { - const { promise: promise2, id } = append(this.pending, createScheduledTask()); - this.logger(`Scheduling id=%s`, id); - this.schedule(); - return promise2; - } - }; - } -}); -var apply_patch_exports = {}; -__export2(apply_patch_exports, { - applyPatchTask: () => applyPatchTask -}); -function applyPatchTask(patches, customArgs) { - return straightThroughStringTask(["apply", ...customArgs, ...patches]); -} -var init_apply_patch = __esm2({ - "src/lib/tasks/apply-patch.ts"() { - init_task(); - } -}); -function branchDeletionSuccess(branch2, hash2) { - return { - branch: branch2, - hash: hash2, - success: true - }; -} -function branchDeletionFailure(branch2) { - return { - branch: branch2, - hash: null, - success: false - }; -} -var BranchDeletionBatch; -var init_BranchDeleteSummary = __esm2({ - "src/lib/responses/BranchDeleteSummary.ts"() { - BranchDeletionBatch = class { - constructor() { - this.all = []; - this.branches = {}; - this.errors = []; - } - get success() { - return !this.errors.length; - } - }; - } -}); -function hasBranchDeletionError(data, processExitCode) { - return processExitCode === 1 && deleteErrorRegex.test(data); -} -var deleteSuccessRegex; -var deleteErrorRegex; -var parsers8; -var parseBranchDeletions; -var init_parse_branch_delete = __esm2({ - "src/lib/parsers/parse-branch-delete.ts"() { - init_BranchDeleteSummary(); - init_utils(); - deleteSuccessRegex = /(\S+)\s+\(\S+\s([^)]+)\)/; - deleteErrorRegex = /^error[^']+'([^']+)'/m; - parsers8 = [ - new LineParser(deleteSuccessRegex, (result, [branch2, hash2]) => { - const deletion = branchDeletionSuccess(branch2, hash2); - result.all.push(deletion); - result.branches[branch2] = deletion; - }), - new LineParser(deleteErrorRegex, (result, [branch2]) => { - const deletion = branchDeletionFailure(branch2); - result.errors.push(deletion); - result.all.push(deletion); - result.branches[branch2] = deletion; - }) - ]; - parseBranchDeletions = (stdOut, stdErr) => { - return parseStringResponse(new BranchDeletionBatch(), parsers8, [stdOut, stdErr]); - }; - } -}); -var BranchSummaryResult; -var init_BranchSummary = __esm2({ - "src/lib/responses/BranchSummary.ts"() { - BranchSummaryResult = class { - constructor() { - this.all = []; - this.branches = {}; - this.current = ""; - this.detached = false; - } - push(status2, detached, name, commit2, label) { - if (status2 === "*") { - this.detached = detached; - this.current = name; - } - this.all.push(name); - this.branches[name] = { - current: status2 === "*", - linkedWorkTree: status2 === "+", - name, - commit: commit2, - label - }; - } - }; - } -}); -function branchStatus(input) { - return input ? input.charAt(0) : ""; -} -function parseBranchSummary(stdOut) { - return parseStringResponse(new BranchSummaryResult(), parsers9, stdOut); -} -var parsers9; -var init_parse_branch = __esm2({ - "src/lib/parsers/parse-branch.ts"() { - init_BranchSummary(); - init_utils(); - parsers9 = [ - new LineParser(/^([*+]\s)?\((?:HEAD )?detached (?:from|at) (\S+)\)\s+([a-z0-9]+)\s(.*)$/, (result, [current, name, commit2, label]) => { - result.push(branchStatus(current), true, name, commit2, label); - }), - new LineParser(/^([*+]\s)?(\S+)\s+([a-z0-9]+)\s?(.*)$/s, (result, [current, name, commit2, label]) => { - result.push(branchStatus(current), false, name, commit2, label); - }) - ]; - } -}); -var branch_exports = {}; -__export2(branch_exports, { - branchLocalTask: () => branchLocalTask, - branchTask: () => branchTask, - containsDeleteBranchCommand: () => containsDeleteBranchCommand, - deleteBranchTask: () => deleteBranchTask, - deleteBranchesTask: () => deleteBranchesTask -}); -function containsDeleteBranchCommand(commands2) { - const deleteCommands = ["-d", "-D", "--delete"]; - return commands2.some((command) => deleteCommands.includes(command)); -} -function branchTask(customArgs) { - const isDelete = containsDeleteBranchCommand(customArgs); - const commands2 = ["branch", ...customArgs]; - if (commands2.length === 1) { - commands2.push("-a"); - } - if (!commands2.includes("-v")) { - commands2.splice(1, 0, "-v"); - } - return { - format: "utf-8", - commands: commands2, - parser(stdOut, stdErr) { - if (isDelete) { - return parseBranchDeletions(stdOut, stdErr).all[0]; - } - return parseBranchSummary(stdOut); - } - }; -} -function branchLocalTask() { - const parser3 = parseBranchSummary; - return { - format: "utf-8", - commands: ["branch", "-v"], - parser: parser3 - }; -} -function deleteBranchesTask(branches, forceDelete = false) { - return { - format: "utf-8", - commands: ["branch", "-v", forceDelete ? "-D" : "-d", ...branches], - parser(stdOut, stdErr) { - return parseBranchDeletions(stdOut, stdErr); - }, - onError({ exitCode, stdOut }, error, done, fail) { - if (!hasBranchDeletionError(String(error), exitCode)) { - return fail(error); - } - done(stdOut); - } - }; -} -function deleteBranchTask(branch2, forceDelete = false) { - const task = { - format: "utf-8", - commands: ["branch", "-v", forceDelete ? "-D" : "-d", branch2], - parser(stdOut, stdErr) { - return parseBranchDeletions(stdOut, stdErr).branches[branch2]; - }, - onError({ exitCode, stdErr, stdOut }, error, _, fail) { - if (!hasBranchDeletionError(String(error), exitCode)) { - return fail(error); - } - throw new GitResponseError(task.parser(bufferToString(stdOut), bufferToString(stdErr)), String(error)); - } - }; - return task; -} -var init_branch = __esm2({ - "src/lib/tasks/branch.ts"() { - init_git_response_error(); - init_parse_branch_delete(); - init_parse_branch(); - init_utils(); - } -}); -var parseCheckIgnore; -var init_CheckIgnore = __esm2({ - "src/lib/responses/CheckIgnore.ts"() { - parseCheckIgnore = (text2) => { - return text2.split(/\n/g).map((line) => line.trim()).filter((file) => !!file); - }; - } -}); -var check_ignore_exports = {}; -__export2(check_ignore_exports, { - checkIgnoreTask: () => checkIgnoreTask -}); -function checkIgnoreTask(paths) { - return { - commands: ["check-ignore", ...paths], - format: "utf-8", - parser: parseCheckIgnore - }; -} -var init_check_ignore = __esm2({ - "src/lib/tasks/check-ignore.ts"() { - init_CheckIgnore(); - } -}); -var clone_exports = {}; -__export2(clone_exports, { - cloneMirrorTask: () => cloneMirrorTask, - cloneTask: () => cloneTask -}); -function disallowedCommand(command) { - return /^--upload-pack(=|$)/.test(command); -} -function cloneTask(repo, directory, customArgs) { - const commands2 = ["clone", ...customArgs]; - filterString(repo) && commands2.push(repo); - filterString(directory) && commands2.push(directory); - const banned = commands2.find(disallowedCommand); - if (banned) { - return configurationErrorTask(`git.fetch: potential exploit argument blocked.`); - } - return straightThroughStringTask(commands2); -} -function cloneMirrorTask(repo, directory, customArgs) { - append(customArgs, "--mirror"); - return cloneTask(repo, directory, customArgs); -} -var init_clone = __esm2({ - "src/lib/tasks/clone.ts"() { - init_task(); - init_utils(); - } -}); -function parseFetchResult(stdOut, stdErr) { - const result = { - raw: stdOut, - remote: null, - branches: [], - tags: [], - updated: [], - deleted: [] - }; - return parseStringResponse(result, parsers10, [stdOut, stdErr]); -} -var parsers10; -var init_parse_fetch = __esm2({ - "src/lib/parsers/parse-fetch.ts"() { - init_utils(); - parsers10 = [ - new LineParser(/From (.+)$/, (result, [remote]) => { - result.remote = remote; - }), - new LineParser(/\* \[new branch]\s+(\S+)\s*-> (.+)$/, (result, [name, tracking]) => { - result.branches.push({ - name, - tracking - }); - }), - new LineParser(/\* \[new tag]\s+(\S+)\s*-> (.+)$/, (result, [name, tracking]) => { - result.tags.push({ - name, - tracking - }); - }), - new LineParser(/- \[deleted]\s+\S+\s*-> (.+)$/, (result, [tracking]) => { - result.deleted.push({ - tracking - }); - }), - new LineParser(/\s*([^.]+)\.\.(\S+)\s+(\S+)\s*-> (.+)$/, (result, [from, to, name, tracking]) => { - result.updated.push({ - name, - tracking, - to, - from - }); - }) - ]; - } -}); -var fetch_exports = {}; -__export2(fetch_exports, { - fetchTask: () => fetchTask -}); -function disallowedCommand2(command) { - return /^--upload-pack(=|$)/.test(command); -} -function fetchTask(remote, branch2, customArgs) { - const commands2 = ["fetch", ...customArgs]; - if (remote && branch2) { - commands2.push(remote, branch2); - } - const banned = commands2.find(disallowedCommand2); - if (banned) { - return configurationErrorTask(`git.fetch: potential exploit argument blocked.`); - } - return { - commands: commands2, - format: "utf-8", - parser: parseFetchResult - }; -} -var init_fetch = __esm2({ - "src/lib/tasks/fetch.ts"() { - init_parse_fetch(); - init_task(); - } -}); -function parseMoveResult(stdOut) { - return parseStringResponse({ moves: [] }, parsers11, stdOut); -} -var parsers11; -var init_parse_move = __esm2({ - "src/lib/parsers/parse-move.ts"() { - init_utils(); - parsers11 = [ - new LineParser(/^Renaming (.+) to (.+)$/, (result, [from, to]) => { - result.moves.push({ from, to }); - }) - ]; - } -}); -var move_exports = {}; -__export2(move_exports, { - moveTask: () => moveTask -}); -function moveTask(from, to) { - return { - commands: ["mv", "-v", ...asArray(from), to], - format: "utf-8", - parser: parseMoveResult - }; -} -var init_move = __esm2({ - "src/lib/tasks/move.ts"() { - init_parse_move(); - init_utils(); - } -}); -var pull_exports = {}; -__export2(pull_exports, { - pullTask: () => pullTask -}); -function pullTask(remote, branch2, customArgs) { - const commands2 = ["pull", ...customArgs]; - if (remote && branch2) { - commands2.splice(1, 0, remote, branch2); - } - return { - commands: commands2, - format: "utf-8", - parser(stdOut, stdErr) { - return parsePullResult(stdOut, stdErr); - }, - onError(result, _error, _done, fail) { - const pullError = parsePullErrorResult(bufferToString(result.stdOut), bufferToString(result.stdErr)); - if (pullError) { - return fail(new GitResponseError(pullError)); - } - fail(_error); - } - }; -} -var init_pull = __esm2({ - "src/lib/tasks/pull.ts"() { - init_git_response_error(); - init_parse_pull(); - init_utils(); - } -}); -function parseGetRemotes(text2) { - const remotes = {}; - forEach(text2, ([name]) => remotes[name] = { name }); - return Object.values(remotes); -} -function parseGetRemotesVerbose(text2) { - const remotes = {}; - forEach(text2, ([name, url, purpose]) => { - if (!remotes.hasOwnProperty(name)) { - remotes[name] = { - name, - refs: { fetch: "", push: "" } - }; - } - if (purpose && url) { - remotes[name].refs[purpose.replace(/[^a-z]/g, "")] = url; - } - }); - return Object.values(remotes); -} -function forEach(text2, handler) { - forEachLineWithContent(text2, (line) => handler(line.split(/\s+/))); -} -var init_GetRemoteSummary = __esm2({ - "src/lib/responses/GetRemoteSummary.ts"() { - init_utils(); - } -}); -var remote_exports = {}; -__export2(remote_exports, { - addRemoteTask: () => addRemoteTask, - getRemotesTask: () => getRemotesTask, - listRemotesTask: () => listRemotesTask, - remoteTask: () => remoteTask, - removeRemoteTask: () => removeRemoteTask -}); -function addRemoteTask(remoteName, remoteRepo, customArgs = []) { - return straightThroughStringTask(["remote", "add", ...customArgs, remoteName, remoteRepo]); -} -function getRemotesTask(verbose) { - const commands2 = ["remote"]; - if (verbose) { - commands2.push("-v"); - } - return { - commands: commands2, - format: "utf-8", - parser: verbose ? parseGetRemotesVerbose : parseGetRemotes - }; -} -function listRemotesTask(customArgs = []) { - const commands2 = [...customArgs]; - if (commands2[0] !== "ls-remote") { - commands2.unshift("ls-remote"); - } - return straightThroughStringTask(commands2); -} -function remoteTask(customArgs = []) { - const commands2 = [...customArgs]; - if (commands2[0] !== "remote") { - commands2.unshift("remote"); - } - return straightThroughStringTask(commands2); -} -function removeRemoteTask(remoteName) { - return straightThroughStringTask(["remote", "remove", remoteName]); -} -var init_remote = __esm2({ - "src/lib/tasks/remote.ts"() { - init_GetRemoteSummary(); - init_task(); - } -}); -var stash_list_exports = {}; -__export2(stash_list_exports, { - stashListTask: () => stashListTask -}); -function stashListTask(opt = {}, customArgs) { - const options = parseLogOptions(opt); - const commands2 = ["stash", "list", ...options.commands, ...customArgs]; - const parser3 = createListLogSummaryParser(options.splitter, options.fields, logFormatFromCommand(commands2)); - return validateLogFormatConfig(commands2) || { - commands: commands2, - format: "utf-8", - parser: parser3 - }; -} -var init_stash_list = __esm2({ - "src/lib/tasks/stash-list.ts"() { - init_log_format(); - init_parse_list_log_summary(); - init_diff(); - init_log(); - } -}); -var sub_module_exports = {}; -__export2(sub_module_exports, { - addSubModuleTask: () => addSubModuleTask, - initSubModuleTask: () => initSubModuleTask, - subModuleTask: () => subModuleTask, - updateSubModuleTask: () => updateSubModuleTask -}); -function addSubModuleTask(repo, path2) { - return subModuleTask(["add", repo, path2]); -} -function initSubModuleTask(customArgs) { - return subModuleTask(["init", ...customArgs]); -} -function subModuleTask(customArgs) { - const commands2 = [...customArgs]; - if (commands2[0] !== "submodule") { - commands2.unshift("submodule"); - } - return straightThroughStringTask(commands2); -} -function updateSubModuleTask(customArgs) { - return subModuleTask(["update", ...customArgs]); -} -var init_sub_module = __esm2({ - "src/lib/tasks/sub-module.ts"() { - init_task(); - } -}); -function singleSorted(a, b) { - const aIsNum = isNaN(a); - const bIsNum = isNaN(b); - if (aIsNum !== bIsNum) { - return aIsNum ? 1 : -1; - } - return aIsNum ? sorted(a, b) : 0; -} -function sorted(a, b) { - return a === b ? 0 : a > b ? 1 : -1; -} -function trimmed(input) { - return input.trim(); -} -function toNumber(input) { - if (typeof input === "string") { - return parseInt(input.replace(/^\D+/g, ""), 10) || 0; - } - return 0; -} -var TagList; -var parseTagList; -var init_TagList = __esm2({ - "src/lib/responses/TagList.ts"() { - TagList = class { - constructor(all, latest) { - this.all = all; - this.latest = latest; - } - }; - parseTagList = function(data, customSort = false) { - const tags = data.split("\n").map(trimmed).filter(Boolean); - if (!customSort) { - tags.sort(function(tagA, tagB) { - const partsA = tagA.split("."); - const partsB = tagB.split("."); - if (partsA.length === 1 || partsB.length === 1) { - return singleSorted(toNumber(partsA[0]), toNumber(partsB[0])); - } - for (let i = 0, l = Math.max(partsA.length, partsB.length); i < l; i++) { - const diff3 = sorted(toNumber(partsA[i]), toNumber(partsB[i])); - if (diff3) { - return diff3; - } - } - return 0; - }); - } - const latest = customSort ? tags[0] : [...tags].reverse().find((tag2) => tag2.indexOf(".") >= 0); - return new TagList(tags, latest); - }; - } -}); -var tag_exports = {}; -__export2(tag_exports, { - addAnnotatedTagTask: () => addAnnotatedTagTask, - addTagTask: () => addTagTask, - tagListTask: () => tagListTask -}); -function tagListTask(customArgs = []) { - const hasCustomSort = customArgs.some((option) => /^--sort=/.test(option)); - return { - format: "utf-8", - commands: ["tag", "-l", ...customArgs], - parser(text2) { - return parseTagList(text2, hasCustomSort); - } - }; -} -function addTagTask(name) { - return { - format: "utf-8", - commands: ["tag", name], - parser() { - return { name }; - } - }; -} -function addAnnotatedTagTask(name, tagMessage) { - return { - format: "utf-8", - commands: ["tag", "-a", "-m", tagMessage, name], - parser() { - return { name }; - } - }; -} -var init_tag = __esm2({ - "src/lib/tasks/tag.ts"() { - init_TagList(); - } -}); -var require_git = __commonJS2({ - "src/git.js"(exports2, module2) { - var { GitExecutor: GitExecutor2 } = (init_git_executor(), __toCommonJS2(git_executor_exports)); - var { SimpleGitApi: SimpleGitApi2 } = (init_simple_git_api(), __toCommonJS2(simple_git_api_exports)); - var { Scheduler: Scheduler2 } = (init_scheduler(), __toCommonJS2(scheduler_exports)); - var { configurationErrorTask: configurationErrorTask2 } = (init_task(), __toCommonJS2(task_exports)); - var { - asArray: asArray2, - filterArray: filterArray2, - filterPrimitives: filterPrimitives2, - filterString: filterString2, - filterStringOrStringArray: filterStringOrStringArray2, - filterType: filterType2, - getTrailingOptions: getTrailingOptions2, - trailingFunctionArgument: trailingFunctionArgument2, - trailingOptionsArgument: trailingOptionsArgument2 - } = (init_utils(), __toCommonJS2(utils_exports)); - var { applyPatchTask: applyPatchTask2 } = (init_apply_patch(), __toCommonJS2(apply_patch_exports)); - var { - branchTask: branchTask2, - branchLocalTask: branchLocalTask2, - deleteBranchesTask: deleteBranchesTask2, - deleteBranchTask: deleteBranchTask2 - } = (init_branch(), __toCommonJS2(branch_exports)); - var { checkIgnoreTask: checkIgnoreTask2 } = (init_check_ignore(), __toCommonJS2(check_ignore_exports)); - var { checkIsRepoTask: checkIsRepoTask2 } = (init_check_is_repo(), __toCommonJS2(check_is_repo_exports)); - var { cloneTask: cloneTask2, cloneMirrorTask: cloneMirrorTask2 } = (init_clone(), __toCommonJS2(clone_exports)); - var { cleanWithOptionsTask: cleanWithOptionsTask2, isCleanOptionsArray: isCleanOptionsArray2 } = (init_clean(), __toCommonJS2(clean_exports)); - var { diffSummaryTask: diffSummaryTask2 } = (init_diff(), __toCommonJS2(diff_exports)); - var { fetchTask: fetchTask2 } = (init_fetch(), __toCommonJS2(fetch_exports)); - var { moveTask: moveTask2 } = (init_move(), __toCommonJS2(move_exports)); - var { pullTask: pullTask2 } = (init_pull(), __toCommonJS2(pull_exports)); - var { pushTagsTask: pushTagsTask2 } = (init_push(), __toCommonJS2(push_exports)); - var { - addRemoteTask: addRemoteTask2, - getRemotesTask: getRemotesTask2, - listRemotesTask: listRemotesTask2, - remoteTask: remoteTask2, - removeRemoteTask: removeRemoteTask2 - } = (init_remote(), __toCommonJS2(remote_exports)); - var { getResetMode: getResetMode2, resetTask: resetTask2 } = (init_reset(), __toCommonJS2(reset_exports)); - var { stashListTask: stashListTask2 } = (init_stash_list(), __toCommonJS2(stash_list_exports)); - var { - addSubModuleTask: addSubModuleTask2, - initSubModuleTask: initSubModuleTask2, - subModuleTask: subModuleTask2, - updateSubModuleTask: updateSubModuleTask2 - } = (init_sub_module(), __toCommonJS2(sub_module_exports)); - var { addAnnotatedTagTask: addAnnotatedTagTask2, addTagTask: addTagTask2, tagListTask: tagListTask2 } = (init_tag(), __toCommonJS2(tag_exports)); - var { straightThroughBufferTask: straightThroughBufferTask2, straightThroughStringTask: straightThroughStringTask2 } = (init_task(), __toCommonJS2(task_exports)); - function Git2(options, plugins) { - this._executor = new GitExecutor2(options.binary, options.baseDir, new Scheduler2(options.maxConcurrentProcesses), plugins); - this._trimmed = options.trimmed; - } - (Git2.prototype = Object.create(SimpleGitApi2.prototype)).constructor = Git2; - Git2.prototype.customBinary = function(command) { - this._executor.binary = command; - return this; - }; - Git2.prototype.env = function(name, value) { - if (arguments.length === 1 && typeof name === "object") { - this._executor.env = name; - } else { - (this._executor.env = this._executor.env || {})[name] = value; - } - return this; - }; - Git2.prototype.stashList = function(options) { - return this._runTask(stashListTask2(trailingOptionsArgument2(arguments) || {}, filterArray2(options) && options || []), trailingFunctionArgument2(arguments)); - }; - function createCloneTask(api, task, repoPath, localPath) { - if (typeof repoPath !== "string") { - return configurationErrorTask2(`git.${api}() requires a string 'repoPath'`); - } - return task(repoPath, filterType2(localPath, filterString2), getTrailingOptions2(arguments)); - } - Git2.prototype.clone = function() { - return this._runTask(createCloneTask("clone", cloneTask2, ...arguments), trailingFunctionArgument2(arguments)); - }; - Git2.prototype.mirror = function() { - return this._runTask(createCloneTask("mirror", cloneMirrorTask2, ...arguments), trailingFunctionArgument2(arguments)); - }; - Git2.prototype.mv = function(from, to) { - return this._runTask(moveTask2(from, to), trailingFunctionArgument2(arguments)); - }; - Git2.prototype.checkoutLatestTag = function(then) { - var git = this; - return this.pull(function() { - git.tags(function(err, tags) { - git.checkout(tags.latest, then); - }); - }); - }; - Git2.prototype.pull = function(remote, branch2, options, then) { - return this._runTask(pullTask2(filterType2(remote, filterString2), filterType2(branch2, filterString2), getTrailingOptions2(arguments)), trailingFunctionArgument2(arguments)); - }; - Git2.prototype.fetch = function(remote, branch2) { - return this._runTask(fetchTask2(filterType2(remote, filterString2), filterType2(branch2, filterString2), getTrailingOptions2(arguments)), trailingFunctionArgument2(arguments)); - }; - Git2.prototype.silent = function(silence) { - console.warn("simple-git deprecation notice: git.silent: logging should be configured using the `debug` library / `DEBUG` environment variable, this will be an error in version 3"); - return this; - }; - Git2.prototype.tags = function(options, then) { - return this._runTask(tagListTask2(getTrailingOptions2(arguments)), trailingFunctionArgument2(arguments)); - }; - Git2.prototype.rebase = function() { - return this._runTask(straightThroughStringTask2(["rebase", ...getTrailingOptions2(arguments)]), trailingFunctionArgument2(arguments)); - }; - Git2.prototype.reset = function(mode) { - return this._runTask(resetTask2(getResetMode2(mode), getTrailingOptions2(arguments)), trailingFunctionArgument2(arguments)); - }; - Git2.prototype.revert = function(commit2) { - const next = trailingFunctionArgument2(arguments); - if (typeof commit2 !== "string") { - return this._runTask(configurationErrorTask2("Commit must be a string"), next); - } - return this._runTask(straightThroughStringTask2(["revert", ...getTrailingOptions2(arguments, 0, true), commit2]), next); - }; - Git2.prototype.addTag = function(name) { - const task = typeof name === "string" ? addTagTask2(name) : configurationErrorTask2("Git.addTag requires a tag name"); - return this._runTask(task, trailingFunctionArgument2(arguments)); - }; - Git2.prototype.addAnnotatedTag = function(tagName, tagMessage) { - return this._runTask(addAnnotatedTagTask2(tagName, tagMessage), trailingFunctionArgument2(arguments)); - }; - Git2.prototype.deleteLocalBranch = function(branchName, forceDelete, then) { - return this._runTask(deleteBranchTask2(branchName, typeof forceDelete === "boolean" ? forceDelete : false), trailingFunctionArgument2(arguments)); - }; - Git2.prototype.deleteLocalBranches = function(branchNames, forceDelete, then) { - return this._runTask(deleteBranchesTask2(branchNames, typeof forceDelete === "boolean" ? forceDelete : false), trailingFunctionArgument2(arguments)); - }; - Git2.prototype.branch = function(options, then) { - return this._runTask(branchTask2(getTrailingOptions2(arguments)), trailingFunctionArgument2(arguments)); - }; - Git2.prototype.branchLocal = function(then) { - return this._runTask(branchLocalTask2(), trailingFunctionArgument2(arguments)); - }; - Git2.prototype.raw = function(commands2) { - const createRestCommands = !Array.isArray(commands2); - const command = [].slice.call(createRestCommands ? arguments : commands2, 0); - for (let i = 0; i < command.length && createRestCommands; i++) { - if (!filterPrimitives2(command[i])) { - command.splice(i, command.length - i); - break; - } - } - command.push(...getTrailingOptions2(arguments, 0, true)); - var next = trailingFunctionArgument2(arguments); - if (!command.length) { - return this._runTask(configurationErrorTask2("Raw: must supply one or more command to execute"), next); - } - return this._runTask(straightThroughStringTask2(command, this._trimmed), next); - }; - Git2.prototype.submoduleAdd = function(repo, path2, then) { - return this._runTask(addSubModuleTask2(repo, path2), trailingFunctionArgument2(arguments)); - }; - Git2.prototype.submoduleUpdate = function(args, then) { - return this._runTask(updateSubModuleTask2(getTrailingOptions2(arguments, true)), trailingFunctionArgument2(arguments)); - }; - Git2.prototype.submoduleInit = function(args, then) { - return this._runTask(initSubModuleTask2(getTrailingOptions2(arguments, true)), trailingFunctionArgument2(arguments)); - }; - Git2.prototype.subModule = function(options, then) { - return this._runTask(subModuleTask2(getTrailingOptions2(arguments)), trailingFunctionArgument2(arguments)); - }; - Git2.prototype.listRemote = function() { - return this._runTask(listRemotesTask2(getTrailingOptions2(arguments)), trailingFunctionArgument2(arguments)); - }; - Git2.prototype.addRemote = function(remoteName, remoteRepo, then) { - return this._runTask(addRemoteTask2(remoteName, remoteRepo, getTrailingOptions2(arguments)), trailingFunctionArgument2(arguments)); - }; - Git2.prototype.removeRemote = function(remoteName, then) { - return this._runTask(removeRemoteTask2(remoteName), trailingFunctionArgument2(arguments)); - }; - Git2.prototype.getRemotes = function(verbose, then) { - return this._runTask(getRemotesTask2(verbose === true), trailingFunctionArgument2(arguments)); - }; - Git2.prototype.remote = function(options, then) { - return this._runTask(remoteTask2(getTrailingOptions2(arguments)), trailingFunctionArgument2(arguments)); - }; - Git2.prototype.tag = function(options, then) { - const command = getTrailingOptions2(arguments); - if (command[0] !== "tag") { - command.unshift("tag"); - } - return this._runTask(straightThroughStringTask2(command), trailingFunctionArgument2(arguments)); - }; - Git2.prototype.updateServerInfo = function(then) { - return this._runTask(straightThroughStringTask2(["update-server-info"]), trailingFunctionArgument2(arguments)); - }; - Git2.prototype.pushTags = function(remote, then) { - const task = pushTagsTask2({ remote: filterType2(remote, filterString2) }, getTrailingOptions2(arguments)); - return this._runTask(task, trailingFunctionArgument2(arguments)); - }; - Git2.prototype.rm = function(files) { - return this._runTask(straightThroughStringTask2(["rm", "-f", ...asArray2(files)]), trailingFunctionArgument2(arguments)); - }; - Git2.prototype.rmKeepLocal = function(files) { - return this._runTask(straightThroughStringTask2(["rm", "--cached", ...asArray2(files)]), trailingFunctionArgument2(arguments)); - }; - Git2.prototype.catFile = function(options, then) { - return this._catFile("utf-8", arguments); - }; - Git2.prototype.binaryCatFile = function() { - return this._catFile("buffer", arguments); - }; - Git2.prototype._catFile = function(format, args) { - var handler = trailingFunctionArgument2(args); - var command = ["cat-file"]; - var options = args[0]; - if (typeof options === "string") { - return this._runTask(configurationErrorTask2("Git.catFile: options must be supplied as an array of strings"), handler); - } - if (Array.isArray(options)) { - command.push.apply(command, options); - } - const task = format === "buffer" ? straightThroughBufferTask2(command) : straightThroughStringTask2(command); - return this._runTask(task, handler); - }; - Git2.prototype.diff = function(options, then) { - const task = filterString2(options) ? configurationErrorTask2("git.diff: supplying options as a single string is no longer supported, switch to an array of strings") : straightThroughStringTask2(["diff", ...getTrailingOptions2(arguments)]); - return this._runTask(task, trailingFunctionArgument2(arguments)); - }; - Git2.prototype.diffSummary = function() { - return this._runTask(diffSummaryTask2(getTrailingOptions2(arguments, 1)), trailingFunctionArgument2(arguments)); - }; - Git2.prototype.applyPatch = function(patches) { - const task = !filterStringOrStringArray2(patches) ? configurationErrorTask2(`git.applyPatch requires one or more string patches as the first argument`) : applyPatchTask2(asArray2(patches), getTrailingOptions2([].slice.call(arguments, 1))); - return this._runTask(task, trailingFunctionArgument2(arguments)); - }; - Git2.prototype.revparse = function() { - const commands2 = ["rev-parse", ...getTrailingOptions2(arguments, true)]; - return this._runTask(straightThroughStringTask2(commands2, true), trailingFunctionArgument2(arguments)); - }; - Git2.prototype.show = function(options, then) { - return this._runTask(straightThroughStringTask2(["show", ...getTrailingOptions2(arguments, 1)]), trailingFunctionArgument2(arguments)); - }; - Git2.prototype.clean = function(mode, options, then) { - const usingCleanOptionsArray = isCleanOptionsArray2(mode); - const cleanMode = usingCleanOptionsArray && mode.join("") || filterType2(mode, filterString2) || ""; - const customArgs = getTrailingOptions2([].slice.call(arguments, usingCleanOptionsArray ? 1 : 0)); - return this._runTask(cleanWithOptionsTask2(cleanMode, customArgs), trailingFunctionArgument2(arguments)); - }; - Git2.prototype.exec = function(then) { - const task = { - commands: [], - format: "utf-8", - parser() { - if (typeof then === "function") { - then(); - } - } - }; - return this._runTask(task); - }; - Git2.prototype.clearQueue = function() { - return this; - }; - Git2.prototype.checkIgnore = function(pathnames, then) { - return this._runTask(checkIgnoreTask2(asArray2(filterType2(pathnames, filterStringOrStringArray2, []))), trailingFunctionArgument2(arguments)); - }; - Git2.prototype.checkIsRepo = function(checkType, then) { - return this._runTask(checkIsRepoTask2(filterType2(checkType, filterString2)), trailingFunctionArgument2(arguments)); - }; - module2.exports = Git2; - } -}); -init_git_error(); -var GitConstructError = class extends GitError { - constructor(config, message) { - super(void 0, message); - this.config = config; - } -}; -init_git_error(); -init_git_error(); -var GitPluginError = class extends GitError { - constructor(task, plugin, message) { - super(task, message); - this.task = task; - this.plugin = plugin; - Object.setPrototypeOf(this, new.target.prototype); - } -}; -init_git_response_error(); -init_task_configuration_error(); -init_check_is_repo(); -init_clean(); -init_config(); -init_grep(); -init_reset(); -function abortPlugin(signal) { - if (!signal) { - return; - } - const onSpawnAfter = { - type: "spawn.after", - action(_data, context) { - function kill() { - context.kill(new GitPluginError(void 0, "abort", "Abort signal received")); - } - signal.addEventListener("abort", kill); - context.spawned.on("close", () => signal.removeEventListener("abort", kill)); - } - }; - const onSpawnBefore = { - type: "spawn.before", - action(_data, context) { - if (signal.aborted) { - context.kill(new GitPluginError(void 0, "abort", "Abort already signaled")); - } - } - }; - return [onSpawnBefore, onSpawnAfter]; -} -function isConfigSwitch(arg) { - return typeof arg === "string" && arg.trim().toLowerCase() === "-c"; -} -function preventProtocolOverride(arg, next) { - if (!isConfigSwitch(arg)) { - return; - } - if (!/^\s*protocol(.[a-z]+)?.allow/.test(next)) { - return; - } - throw new GitPluginError(void 0, "unsafe", "Configuring protocol.allow is not permitted without enabling allowUnsafeExtProtocol"); -} -function preventUploadPack(arg, method2) { - if (/^\s*--(upload|receive)-pack/.test(arg)) { - throw new GitPluginError(void 0, "unsafe", `Use of --upload-pack or --receive-pack is not permitted without enabling allowUnsafePack`); - } - if (method2 === "clone" && /^\s*-u\b/.test(arg)) { - throw new GitPluginError(void 0, "unsafe", `Use of clone with option -u is not permitted without enabling allowUnsafePack`); - } - if (method2 === "push" && /^\s*--exec\b/.test(arg)) { - throw new GitPluginError(void 0, "unsafe", `Use of push with option --exec is not permitted without enabling allowUnsafePack`); - } -} -function blockUnsafeOperationsPlugin({ - allowUnsafeProtocolOverride = false, - allowUnsafePack = false -} = {}) { - return { - type: "spawn.args", - action(args, context) { - args.forEach((current, index2) => { - const next = index2 < args.length ? args[index2 + 1] : ""; - allowUnsafeProtocolOverride || preventProtocolOverride(current, next); - allowUnsafePack || preventUploadPack(current, context.method); - }); - return args; - } - }; -} -init_utils(); -function commandConfigPrefixingPlugin(configuration) { - const prefix = prefixedArray(configuration, "-c"); - return { - type: "spawn.args", - action(data) { - return [...prefix, ...data]; - } - }; -} -init_utils(); -var never = (0, import_promise_deferred2.deferred)().promise; -function completionDetectionPlugin({ - onClose = true, - onExit = 50 -} = {}) { - function createEvents() { - let exitCode = -1; - const events = { - close: (0, import_promise_deferred2.deferred)(), - closeTimeout: (0, import_promise_deferred2.deferred)(), - exit: (0, import_promise_deferred2.deferred)(), - exitTimeout: (0, import_promise_deferred2.deferred)() - }; - const result = Promise.race([ - onClose === false ? never : events.closeTimeout.promise, - onExit === false ? never : events.exitTimeout.promise - ]); - configureTimeout(onClose, events.close, events.closeTimeout); - configureTimeout(onExit, events.exit, events.exitTimeout); - return { - close(code) { - exitCode = code; - events.close.done(); - }, - exit(code) { - exitCode = code; - events.exit.done(); - }, - get exitCode() { - return exitCode; - }, - result - }; - } - function configureTimeout(flag, event, timeout) { - if (flag === false) { - return; - } - (flag === true ? event.promise : event.promise.then(() => delay(flag))).then(timeout.done); - } - return { - type: "spawn.after", - action(_0, _1) { - return __async(this, arguments, function* (_data, { spawned, close }) { - var _a2, _b; - const events = createEvents(); - let deferClose = true; - let quickClose = () => void (deferClose = false); - (_a2 = spawned.stdout) == null ? void 0 : _a2.on("data", quickClose); - (_b = spawned.stderr) == null ? void 0 : _b.on("data", quickClose); - spawned.on("error", quickClose); - spawned.on("close", (code) => events.close(code)); - spawned.on("exit", (code) => events.exit(code)); - try { - yield events.result; - if (deferClose) { - yield delay(50); - } - close(events.exitCode); - } catch (err) { - close(events.exitCode, err); - } - }); - } - }; -} -init_git_error(); -function isTaskError(result) { - return !!(result.exitCode && result.stdErr.length); -} -function getErrorMessage(result) { - return Buffer.concat([...result.stdOut, ...result.stdErr]); -} -function errorDetectionHandler(overwrite = false, isError = isTaskError, errorMessage = getErrorMessage) { - return (error, result) => { - if (!overwrite && error || !isError(result)) { - return error; - } - return errorMessage(result); - }; -} -function errorDetectionPlugin(config) { - return { - type: "task.error", - action(data, context) { - const error = config(data.error, { - stdErr: context.stdErr, - stdOut: context.stdOut, - exitCode: context.exitCode - }); - if (Buffer.isBuffer(error)) { - return { error: new GitError(void 0, error.toString("utf-8")) }; - } - return { - error - }; - } - }; -} -init_utils(); -var PluginStore = class { - constructor() { - this.plugins = /* @__PURE__ */ new Set(); - } - add(plugin) { - const plugins = []; - asArray(plugin).forEach((plugin2) => plugin2 && this.plugins.add(append(plugins, plugin2))); - return () => { - plugins.forEach((plugin2) => this.plugins.delete(plugin2)); - }; - } - exec(type, data, context) { - let output = data; - const contextual = Object.freeze(Object.create(context)); - for (const plugin of this.plugins) { - if (plugin.type === type) { - output = plugin.action(output, contextual); - } - } - return output; - } -}; -init_utils(); -function progressMonitorPlugin(progress) { - const progressCommand = "--progress"; - const progressMethods = ["checkout", "clone", "fetch", "pull", "push"]; - const onProgress = { - type: "spawn.after", - action(_data, context) { - var _a2; - if (!context.commands.includes(progressCommand)) { - return; - } - (_a2 = context.spawned.stderr) == null ? void 0 : _a2.on("data", (chunk) => { - const message = /^([\s\S]+?):\s*(\d+)% \((\d+)\/(\d+)\)/.exec(chunk.toString("utf8")); - if (!message) { - return; - } - progress({ - method: context.method, - stage: progressEventStage(message[1]), - progress: asNumber(message[2]), - processed: asNumber(message[3]), - total: asNumber(message[4]) - }); - }); - } - }; - const onArgs = { - type: "spawn.args", - action(args, context) { - if (!progressMethods.includes(context.method)) { - return args; - } - return including(args, progressCommand); - } - }; - return [onArgs, onProgress]; -} -function progressEventStage(input) { - return String(input.toLowerCase().split(" ", 1)) || "unknown"; -} -init_utils(); -function spawnOptionsPlugin(spawnOptions) { - const options = pick(spawnOptions, ["uid", "gid"]); - return { - type: "spawn.options", - action(data) { - return __spreadValues(__spreadValues({}, options), data); - } - }; -} -function timeoutPlugin({ - block, - stdErr = true, - stdOut = true -}) { - if (block > 0) { - return { - type: "spawn.after", - action(_data, context) { - var _a2, _b; - let timeout; - function wait3() { - timeout && clearTimeout(timeout); - timeout = setTimeout(kill, block); - } - function stop() { - var _a3, _b2; - (_a3 = context.spawned.stdout) == null ? void 0 : _a3.off("data", wait3); - (_b2 = context.spawned.stderr) == null ? void 0 : _b2.off("data", wait3); - context.spawned.off("exit", stop); - context.spawned.off("close", stop); - timeout && clearTimeout(timeout); - } - function kill() { - stop(); - context.kill(new GitPluginError(void 0, "timeout", `block timeout reached`)); - } - stdOut && ((_a2 = context.spawned.stdout) == null ? void 0 : _a2.on("data", wait3)); - stdErr && ((_b = context.spawned.stderr) == null ? void 0 : _b.on("data", wait3)); - context.spawned.on("exit", stop); - context.spawned.on("close", stop); - wait3(); - } - }; - } -} -init_utils(); -var Git = require_git(); -function gitInstanceFactory(baseDir, options) { - const plugins = new PluginStore(); - const config = createInstanceConfig(baseDir && (typeof baseDir === "string" ? { baseDir } : baseDir) || {}, options); - if (!folderExists(config.baseDir)) { - throw new GitConstructError(config, `Cannot use simple-git on a directory that does not exist`); - } - if (Array.isArray(config.config)) { - plugins.add(commandConfigPrefixingPlugin(config.config)); - } - plugins.add(blockUnsafeOperationsPlugin(config.unsafe)); - plugins.add(completionDetectionPlugin(config.completion)); - config.abort && plugins.add(abortPlugin(config.abort)); - config.progress && plugins.add(progressMonitorPlugin(config.progress)); - config.timeout && plugins.add(timeoutPlugin(config.timeout)); - config.spawnOptions && plugins.add(spawnOptionsPlugin(config.spawnOptions)); - plugins.add(errorDetectionPlugin(errorDetectionHandler(true))); - config.errors && plugins.add(errorDetectionPlugin(config.errors)); - return new Git(config, plugins); -} -init_git_response_error(); -var esm_default = gitInstanceFactory; - -// src/constants.ts -init_polyfill_buffer(); -var import_obsidian2 = require("obsidian"); -var DATE_FORMAT = "YYYY-MM-DD"; -var DATE_TIME_FORMAT_MINUTES = `${DATE_FORMAT} HH:mm`; -var DATE_TIME_FORMAT_SECONDS = `${DATE_FORMAT} HH:mm:ss`; -var GIT_LINE_AUTHORING_MOVEMENT_DETECTION_MINIMAL_LENGTH = 40; -var DEFAULT_SETTINGS = { - commitMessage: "vault backup: {{date}}", - commitDateFormat: DATE_TIME_FORMAT_SECONDS, - autoSaveInterval: 0, - autoPushInterval: 0, - autoPullInterval: 0, - autoPullOnBoot: false, - disablePush: false, - pullBeforePush: true, - disablePopups: false, - disablePopupsForNoChanges: false, - listChangedFilesInMessageBody: false, - showStatusBar: true, - updateSubmodules: false, - syncMethod: "merge", - customMessageOnAutoBackup: false, - autoBackupAfterFileChange: false, - treeStructure: false, - refreshSourceControl: import_obsidian2.Platform.isDesktopApp, - basePath: "", - differentIntervalCommitAndPush: false, - changedFilesInStatusBar: false, - showedMobileNotice: false, - refreshSourceControlTimer: 7e3, - showBranchStatusBar: true, - setLastSaveToLastCommit: false, - submoduleRecurseCheckout: false, - gitDir: "", - showFileMenu: true, - authorInHistoryView: "hide", - dateInHistoryView: false, - lineAuthor: { - show: false, - followMovement: "inactive", - authorDisplay: "initials", - showCommitHash: false, - dateTimeFormatOptions: "date", - dateTimeFormatCustomString: DATE_TIME_FORMAT_MINUTES, - dateTimeTimezone: "viewer-local", - coloringMaxAge: "1y", - // colors were picked via: - // https://color.adobe.com/de/create/color-accessibility - colorNew: { r: 255, g: 150, b: 150 }, - colorOld: { r: 120, g: 160, b: 255 }, - textColorCss: "var(--text-muted)", - // more pronounced than line numbers, but less than the content text - ignoreWhitespace: false, - gutterSpacingFallbackLength: 5 - } -}; -var SOURCE_CONTROL_VIEW_CONFIG = { - type: "git-view", - name: "Source Control", - icon: "git-pull-request" -}; -var HISTORY_VIEW_CONFIG = { - type: "git-history-view", - name: "History", - icon: "history" -}; -var DIFF_VIEW_CONFIG = { - type: "diff-view", - name: "Diff View", - icon: "git-pull-request" -}; - -// src/types.ts -init_polyfill_buffer(); -function mergeSettingsByPriority(low, high) { - const lineAuthor = Object.assign({}, low.lineAuthor, high.lineAuthor); - return Object.assign({}, low, high, { lineAuthor }); -} - -// src/utils.ts -init_polyfill_buffer(); -var cssColorConverter = __toESM(require_lib3()); -var import_deep_equal = __toESM(require_deep_equal()); -var import_obsidian3 = require("obsidian"); -var worthWalking2 = (filepath, root2) => { - if (filepath === "." || root2 == null || root2.length === 0 || root2 === ".") { - return true; - } - if (root2.length >= filepath.length) { - return root2.startsWith(filepath); - } else { - return filepath.startsWith(root2); - } -}; -function getNewLeaf(event) { - let leaf; - if (event) { - if (event.button === 0 || event.button === 1) { - const type = import_obsidian3.Keymap.isModEvent(event); - leaf = app.workspace.getLeaf(type); - } - } else { - leaf = app.workspace.getLeaf(false); - } - return leaf; -} -function impossibleBranch(x) { - throw new Error("Impossible branch: " + x); -} -function rgbToString(rgb) { - return `rgb(${rgb.r},${rgb.g},${rgb.b})`; -} -function convertToRgb(str) { - var _a2; - const color = (_a2 = cssColorConverter.fromString(str)) == null ? void 0 : _a2.toRgbaArray(); - if (color === void 0) { - return void 0; - } - const [r, g, b] = color; - return { r, g, b }; -} -function momentToEpochSeconds(instant) { - return instant.diff(import_obsidian3.moment.unix(0), "seconds"); -} -function median(array) { - if (array.length === 0) - return void 0; - return array.slice().sort()[Math.floor(array.length / 2)]; -} -function strictDeepEqual(a, b) { - return (0, import_deep_equal.default)(a, b, { strict: true }); -} -function resizeToLength(original, desiredLength, fillChar) { - if (original.length <= desiredLength) { - const prefix = new Array(desiredLength - original.length).fill(fillChar).join(""); - return prefix + original; - } else { - return original.substring(original.length - desiredLength); - } -} -function prefixOfLengthAsWhitespace(toBeRenderedText, whitespacePrefixLength) { - if (whitespacePrefixLength <= 0) - return toBeRenderedText; - const whitespacePrefix = new Array(whitespacePrefixLength).fill(" ").join(""); - const originalSuffix = toBeRenderedText.substring( - whitespacePrefixLength, - toBeRenderedText.length - ); - return whitespacePrefix + originalSuffix; -} -function between(l, x, r) { - return l <= x && x <= r; -} -function splitRemoteBranch(remoteBranch) { - const [remote, ...branch2] = remoteBranch.split("/"); - return [remote, branch2.length === 0 ? void 0 : branch2.join("/")]; -} -function getDisplayPath(path2) { - if (path2.endsWith("/")) - return path2; - return path2.split("/").last().replace(".md", ""); -} -function formatMinutes(minutes) { - if (minutes === 1) - return "1 minute"; - return `${minutes} minutes`; -} - -// src/gitManager/gitManager.ts -init_polyfill_buffer(); -var GitManager = class { - constructor(plugin) { - this.plugin = plugin; - this.app = plugin.app; - } - // Constructs a path relative to the vault from a path relative to the git repository - getRelativeVaultPath(path2) { - if (this.plugin.settings.basePath) { - return this.plugin.settings.basePath + "/" + path2; - } else { - return path2; - } - } - // Constructs a path relative to the git repository from a path relative to the vault - // - // @param doConversion - If false, the path is returned as is. This is added because that parameter is often passed on to functions where this method is called. - getRelativeRepoPath(path2, doConversion = true) { - if (doConversion) { - if (this.plugin.settings.basePath.length > 0) { - return path2.substring(this.plugin.settings.basePath.length + 1); - } - } - return path2; - } - _getTreeStructure(children2, beginLength = 0) { - const list = []; - children2 = [...children2]; - while (children2.length > 0) { - const first2 = children2.first(); - const restPath = first2.path.substring(beginLength); - if (restPath.contains("/")) { - const title = restPath.substring(0, restPath.indexOf("/")); - const childrenWithSameTitle = children2.filter((item) => { - return item.path.substring(beginLength).startsWith(title + "/"); - }); - childrenWithSameTitle.forEach((item) => children2.remove(item)); - const path2 = first2.path.substring( - 0, - restPath.indexOf("/") + beginLength - ); - list.push({ - title, - path: path2, - vaultPath: this.getRelativeVaultPath(path2), - children: this._getTreeStructure( - childrenWithSameTitle, - (beginLength > 0 ? beginLength + title.length : title.length) + 1 - ) - }); - } else { - list.push({ - title: restPath, - data: first2, - path: first2.path, - vaultPath: this.getRelativeVaultPath(first2.path) - }); - children2.remove(first2); - } - } - return list; - } - /* - * Sorts the children and simplifies the title - * If a node only contains another subdirectory, that subdirectory is moved up one level and integrated into the parent node - */ - simplify(tree) { - var _a2, _b, _c, _d; - for (const node of tree) { - while (true) { - const singleChild = ((_a2 = node.children) == null ? void 0 : _a2.length) == 1; - const singleChildIsDir = ((_c = (_b = node.children) == null ? void 0 : _b.first()) == null ? void 0 : _c.data) == void 0; - if (!(node.children != void 0 && singleChild && singleChildIsDir)) - break; - const child = node.children.first(); - node.title += "/" + child.title; - node.data = child.data; - node.path = child.path; - node.vaultPath = child.vaultPath; - node.children = child.children; - } - if (node.children != void 0) { - this.simplify(node.children); - } - (_d = node.children) == null ? void 0 : _d.sort((a, b) => { - const dirCompare = (b.data == void 0 ? 1 : 0) - (a.data == void 0 ? 1 : 0); - if (dirCompare != 0) { - return dirCompare; - } else { - return a.title.localeCompare(b.title); - } - }); - } - return tree.sort((a, b) => { - const dirCompare = (b.data == void 0 ? 1 : 0) - (a.data == void 0 ? 1 : 0); - if (dirCompare != 0) { - return dirCompare; - } else { - return a.title.localeCompare(b.title); - } - }); - } - getTreeStructure(children2) { - const tree = this._getTreeStructure(children2); - const res = this.simplify(tree); - return res; - } - async formatCommitMessage(template) { - let status2; - if (template.includes("{{numFiles}}")) { - status2 = await this.status(); - const numFiles = status2.staged.length; - template = template.replace("{{numFiles}}", String(numFiles)); - } - if (template.includes("{{hostname}}")) { - const hostname = this.plugin.localStorage.getHostname() || ""; - template = template.replace("{{hostname}}", hostname); - } - if (template.includes("{{files}}")) { - status2 = status2 != null ? status2 : await this.status(); - const changeset = {}; - status2.staged.forEach((value) => { - if (value.index in changeset) { - changeset[value.index].push(value.path); - } else { - changeset[value.index] = [value.path]; - } - }); - const chunks = []; - for (const [action, files2] of Object.entries(changeset)) { - chunks.push(action + " " + files2.join(" ")); - } - const files = chunks.join(", "); - template = template.replace("{{files}}", files); - } - const moment6 = window.moment; - template = template.replace( - "{{date}}", - moment6().format(this.plugin.settings.commitDateFormat) - ); - if (this.plugin.settings.listChangedFilesInMessageBody) { - template = template + "\n\nAffected files:\n" + (status2 != null ? status2 : await this.status()).staged.map((e) => e.path).join("\n"); - } - return template; - } -}; - -// src/gitManager/simpleGit.ts -var SimpleGit = class extends GitManager { - constructor(plugin) { - super(plugin); - } - async setGitInstance(ignoreError = false) { - if (this.isGitInstalled()) { - const adapter = this.app.vault.adapter; - const path2 = adapter.getBasePath(); - let basePath = path2; - if (this.plugin.settings.basePath) { - const exists2 = await adapter.exists( - (0, import_obsidian4.normalizePath)(this.plugin.settings.basePath) - ); - if (exists2) { - basePath = path2 + import_path.sep + this.plugin.settings.basePath; - } else if (!ignoreError) { - new import_obsidian4.Notice("ObsidianGit: Base path does not exist"); - } - } - this.git = esm_default({ - baseDir: basePath, - binary: this.plugin.localStorage.getGitPath() || void 0, - config: ["core.quotepath=off"] - }); - const pathPaths = this.plugin.localStorage.getPATHPaths(); - const envVars = this.plugin.localStorage.getEnvVars(); - const gitDir = this.plugin.settings.gitDir; - if (pathPaths.length > 0) { - const path3 = process.env["PATH"] + ":" + pathPaths.join(":"); - process.env["PATH"] = path3; - } - if (gitDir) { - process.env["GIT_DIR"] = gitDir; - } - for (const envVar of envVars) { - const [key2, value] = envVar.split("="); - process.env[key2] = value; - } - import_debug2.default.enable("simple-git"); - if (await this.git.checkIsRepo()) { - await this.git.cwd(await this.git.revparse("--show-toplevel")); - } - } - } - async status() { - this.plugin.setState(1 /* status */); - const status2 = await this.git.status((err) => this.onError(err)); - this.plugin.setState(0 /* idle */); - const allFilesFormatted = status2.files.map((e) => { - const res = this.formatPath(e); - return { - path: res.path, - from: res.from, - index: e.index === "?" ? "U" : e.index, - working_dir: e.working_dir === "?" ? "U" : e.working_dir, - vault_path: this.getRelativeVaultPath(res.path) - }; - }); - return { - all: allFilesFormatted, - changed: allFilesFormatted.filter((e) => e.working_dir !== " "), - staged: allFilesFormatted.filter( - (e) => e.index !== " " && e.index != "U" - ), - conflicted: status2.conflicted.map( - (path2) => this.formatPath({ path: path2 }).path - ) - }; - } - async submoduleAwareHeadRevisonInContainingDirectory(filepath) { - const repoPath = this.getRelativeRepoPath(filepath); - const containingDirectory = path.dirname(repoPath); - const args = ["-C", containingDirectory, "rev-parse", "HEAD"]; - const result = this.git.raw(args); - result.catch( - (err) => console.warn("obsidian-git: rev-parse error:", err) - ); - return result; - } - async getSubmodulePaths() { - return new Promise(async (resolve) => { - this.git.outputHandler(async (cmd, stdout, stderr, args) => { - if (!(args.contains("submodule") && args.contains("foreach"))) { - return; - } - let body = ""; - const root2 = this.app.vault.adapter.getBasePath() + (this.plugin.settings.basePath ? "/" + this.plugin.settings.basePath : ""); - stdout.on("data", (chunk) => { - body += chunk.toString("utf8"); - }); - stdout.on("end", async () => { - const submods = body.split("\n"); - const strippedSubmods = submods.map((i) => { - const submod = i.match(/'([^']*)'/); - if (submod != void 0) { - return root2 + "/" + submod[1] + import_path.sep; - } - }).filter((i) => !!i); - strippedSubmods.reverse(); - resolve(strippedSubmods); - }); - }); - await this.git.subModule(["foreach", "--recursive", ""]); - this.git.outputHandler(() => { - }); - }); - } - //Remove wrong `"` like "My file.md" - formatPath(path2, renamed = false) { - function format(path3) { - if (path3 == void 0) - return void 0; - if (path3.startsWith('"') && path3.endsWith('"')) { - return path3.substring(1, path3.length - 1); - } else { - return path3; - } - } - if (renamed) { - return { - from: format(path2.from), - path: format(path2.path) - }; - } else { - return { - path: format(path2.path) - }; - } - } - async blame(path2, trackMovement, ignoreWhitespace) { - path2 = this.getRelativeRepoPath(path2); - if (!await this.isTracked(path2)) - return "untracked"; - const inSubmodule = await this.getSubmoduleOfFile(path2); - const args = inSubmodule ? ["-C", inSubmodule.submodule] : []; - const relativePath = inSubmodule ? inSubmodule.relativeFilepath : path2; - args.push("blame", "--porcelain"); - if (ignoreWhitespace) - args.push("-w"); - const trackCArg = `-C${GIT_LINE_AUTHORING_MOVEMENT_DETECTION_MINIMAL_LENGTH}`; - switch (trackMovement) { - case "inactive": - break; - case "same-commit": - args.push("-C", trackCArg); - break; - case "all-commits": - args.push("-C", "-C", trackCArg); - break; - default: - impossibleBranch(trackMovement); - } - args.push("--", relativePath); - const rawBlame = await this.git.raw( - args, - (err) => err && console.warn("git-blame", err) - ); - return parseBlame(rawBlame); - } - async isTracked(path2) { - const inSubmodule = await this.getSubmoduleOfFile(path2); - const args = inSubmodule ? ["-C", inSubmodule.submodule] : []; - const relativePath = inSubmodule ? inSubmodule.relativeFilepath : path2; - args.push("ls-files", "--", relativePath); - return this.git.raw(args, (err) => err && console.warn("ls-files", err)).then((x) => x.trim() !== ""); - } - async commitAll({ message }) { - if (this.plugin.settings.updateSubmodules) { - this.plugin.setState(4 /* commit */); - const submodulePaths = await this.getSubmodulePaths(); - for (const item of submodulePaths) { - await this.git.cwd({ path: item, root: false }).add("-A", (err) => this.onError(err)); - await this.git.cwd({ path: item, root: false }).commit( - await this.formatCommitMessage(message), - (err) => this.onError(err) - ); - } - } - this.plugin.setState(3 /* add */); - await this.git.add("-A", (err) => this.onError(err)); - this.plugin.setState(4 /* commit */); - const res = await this.git.commit( - await this.formatCommitMessage(message), - (err) => this.onError(err) - ); - dispatchEvent(new CustomEvent("git-head-update")); - return res.summary.changes; - } - async commit({ - message, - amend - }) { - this.plugin.setState(4 /* commit */); - const res = (await this.git.commit( - await this.formatCommitMessage(message), - amend ? ["--amend"] : [], - (err) => this.onError(err) - )).summary.changes; - dispatchEvent(new CustomEvent("git-head-update")); - this.plugin.setState(0 /* idle */); - return res; - } - async stage(path2, relativeToVault) { - this.plugin.setState(3 /* add */); - path2 = this.getRelativeRepoPath(path2, relativeToVault); - await this.git.add(["--", path2], (err) => this.onError(err)); - this.plugin.setState(0 /* idle */); - } - async stageAll({ dir }) { - this.plugin.setState(3 /* add */); - await this.git.add(dir != null ? dir : "-A", (err) => this.onError(err)); - this.plugin.setState(0 /* idle */); - } - async unstageAll({ dir }) { - this.plugin.setState(3 /* add */); - await this.git.reset( - dir != void 0 ? ["--", dir] : [], - (err) => this.onError(err) - ); - this.plugin.setState(0 /* idle */); - } - async unstage(path2, relativeToVault) { - this.plugin.setState(3 /* add */); - path2 = this.getRelativeRepoPath(path2, relativeToVault); - await this.git.reset(["--", path2], (err) => this.onError(err)); - this.plugin.setState(0 /* idle */); - } - async discard(filepath) { - this.plugin.setState(3 /* add */); - await this.git.checkout(["--", filepath], (err) => this.onError(err)); - this.plugin.setState(0 /* idle */); - } - async hashObject(filepath) { - filepath = this.getRelativeRepoPath(filepath); - const inSubmodule = await this.getSubmoduleOfFile(filepath); - const args = inSubmodule ? ["-C", inSubmodule.submodule] : []; - const relativeFilepath = inSubmodule ? inSubmodule.relativeFilepath : filepath; - args.push("hash-object", "--", relativeFilepath); - const revision = this.git.raw(args); - revision.catch( - (err) => err && console.warn("obsidian-git. hash-object failed:", err == null ? void 0 : err.message) - ); - return revision; - } - async discardAll({ dir }) { - return this.discard(dir != null ? dir : "."); - } - async pull() { - this.plugin.setState(2 /* pull */); - if (this.plugin.settings.updateSubmodules) - await this.git.subModule( - ["update", "--remote", "--merge", "--recursive"], - (err) => this.onError(err) - ); - const branchInfo = await this.branchInfo(); - const localCommit = await this.git.revparse( - [branchInfo.current], - (err) => this.onError(err) - ); - if (!branchInfo.tracking && this.plugin.settings.updateSubmodules) { - this.plugin.log( - "No tracking branch found. Ignoring pull of main repo and updating submodules only." - ); - return; - } - await this.git.fetch((err) => this.onError(err)); - const upstreamCommit = await this.git.revparse( - [branchInfo.tracking], - (err) => this.onError(err) - ); - if (localCommit !== upstreamCommit) { - if (this.plugin.settings.syncMethod === "merge" || this.plugin.settings.syncMethod === "rebase") { - try { - switch (this.plugin.settings.syncMethod) { - case "merge": - await this.git.merge([branchInfo.tracking]); - break; - case "rebase": - await this.git.rebase([branchInfo.tracking]); - } - } catch (err) { - this.plugin.displayError( - `Pull failed (${this.plugin.settings.syncMethod}): ${err.message}` - ); - return; - } - } else if (this.plugin.settings.syncMethod === "reset") { - try { - await this.git.raw( - [ - "update-ref", - `refs/heads/${branchInfo.current}`, - upstreamCommit - ], - (err) => this.onError(err) - ); - await this.unstageAll({}); - } catch (err) { - this.plugin.displayError( - `Sync failed (${this.plugin.settings.syncMethod}): ${err.message}` - ); - } - } - dispatchEvent(new CustomEvent("git-head-update")); - const afterMergeCommit = await this.git.revparse( - [branchInfo.current], - (err) => this.onError(err) - ); - const filesChanged = await this.git.diff([ - `${localCommit}..${afterMergeCommit}`, - "--name-only" - ]); - return filesChanged.split(/\r\n|\r|\n/).filter((value) => value.length > 0).map((e) => { - return { - path: e, - working_dir: "P", - vault_path: this.getRelativeVaultPath(e) - }; - }); - } else { - return []; - } - } - async push() { - this.plugin.setState(5 /* push */); - if (this.plugin.settings.updateSubmodules) { - const res = await this.git.env({ ...process.env, OBSIDIAN_GIT: 1 }).subModule( - [ - "foreach", - "--recursive", - `tracking=$(git for-each-ref --format='%(upstream:short)' "$(git symbolic-ref -q HEAD)"); echo $tracking; if [ ! -z "$(git diff --shortstat $tracking)" ]; then git push; fi` - ], - (err) => this.onError(err) - ); - console.log(res); - } - const status2 = await this.git.status(); - const trackingBranch = status2.tracking; - const currentBranch2 = status2.current; - if (!trackingBranch && this.plugin.settings.updateSubmodules) { - this.plugin.log( - "No tracking branch found. Ignoring push of main repo and updating submodules only." - ); - return void 0; - } - const remoteChangedFiles = (await this.git.diffSummary( - [currentBranch2, trackingBranch, "--"], - (err) => this.onError(err) - )).changed; - await this.git.env({ ...process.env, OBSIDIAN_GIT: 1 }).push((err) => this.onError(err)); - return remoteChangedFiles; - } - async getUnpushedCommits() { - const status2 = await this.git.status(); - const trackingBranch = status2.tracking; - const currentBranch2 = status2.current; - if (trackingBranch == null || currentBranch2 == null) { - return 0; - } - const remoteChangedFiles = (await this.git.diffSummary( - [currentBranch2, trackingBranch, "--"], - (err) => this.onError(err) - )).changed; - return remoteChangedFiles; - } - async canPush() { - if (this.plugin.settings.updateSubmodules === true) { - return true; - } - const status2 = await this.git.status((err) => this.onError(err)); - const trackingBranch = status2.tracking; - const currentBranch2 = status2.current; - if (!trackingBranch) { - return false; - } - const remoteChangedFiles = (await this.git.diffSummary([currentBranch2, trackingBranch, "--"])).changed; - return remoteChangedFiles !== 0; - } - async checkRequirements() { - if (!this.isGitInstalled()) { - return "missing-git"; - } - if (!await this.git.checkIsRepo()) { - return "missing-repo"; - } - return "valid"; - } - async branchInfo() { - const status2 = await this.git.status((err) => this.onError(err)); - const branches = await this.git.branch( - ["--no-color"], - (err) => this.onError(err) - ); - return { - current: status2.current || void 0, - tracking: status2.tracking || void 0, - branches: branches.all - }; - } - async getRemoteUrl(remote) { - try { - return await this.git.remote(["get-url", remote]) || void 0; - } catch (error) { - if (error.toString().contains(remote)) { - return void 0; - } else { - this.onError(error); - } - } - } - // https://github.com/kometenstaub/obsidian-version-history-diff/issues/3 - async log(file, relativeToVault = true, limit) { - let path2; - if (file) { - path2 = this.getRelativeRepoPath(file, relativeToVault); - } - const res = await this.git.log( - { - file: path2, - maxCount: limit, - "-m": null, - "--name-status": null - }, - (err) => this.onError(err) - ); - return res.all.map((e) => { - var _a2, _b, _c, _d; - return { - ...e, - author: { - name: e.author_name, - email: e.author_email - }, - refs: e.refs.split(", ").filter((e2) => e2.length > 0), - diff: { - ...e.diff, - files: (_b = (_a2 = e.diff) == null ? void 0 : _a2.files.map((f) => ({ - ...f, - status: f.status, - path: f.file, - hash: e.hash, - vault_path: this.getRelativeVaultPath(f.file) - }))) != null ? _b : [] - }, - fileName: (_d = (_c = e.diff) == null ? void 0 : _c.files.first()) == null ? void 0 : _d.file - }; - }); - } - async show(commitHash, file, relativeToVault = true) { - const path2 = this.getRelativeRepoPath(file, relativeToVault); - return this.git.show( - [commitHash + ":" + path2], - (err) => this.onError(err) - ); - } - async checkout(branch2, remote) { - if (remote) { - branch2 = `${remote}/${branch2}`; - } - await this.git.checkout(branch2, (err) => this.onError(err)); - if (this.plugin.settings.submoduleRecurseCheckout) { - const submodulePaths = await this.getSubmodulePaths(); - for (const submodulePath of submodulePaths) { - const branchSummary = await this.git.cwd({ path: submodulePath, root: false }).branch(); - if (Object.keys(branchSummary.branches).includes(branch2)) { - await this.git.cwd({ path: submodulePath, root: false }).checkout(branch2, (err) => this.onError(err)); - } - } - } - } - async createBranch(branch2) { - await this.git.checkout(["-b", branch2], (err) => this.onError(err)); - } - async deleteBranch(branch2, force) { - await this.git.branch( - [force ? "-D" : "-d", branch2], - (err) => this.onError(err) - ); - } - async branchIsMerged(branch2) { - const notMergedBranches = await this.git.branch( - ["--no-merged"], - (err) => this.onError(err) - ); - return !notMergedBranches.all.contains(branch2); - } - async init() { - await this.git.init(false, (err) => this.onError(err)); - } - async clone(url, dir, depth) { - await this.git.clone( - url, - path.join( - this.app.vault.adapter.getBasePath(), - dir - ), - depth ? ["--depth", `${depth}`] : [], - (err) => this.onError(err) - ); - } - async setConfig(path2, value) { - if (value == void 0) { - await this.git.raw(["config", "--local", "--unset", path2]); - } else { - await this.git.addConfig(path2, value, (err) => this.onError(err)); - } - } - async getConfig(path2) { - const config = await this.git.listConfig( - "local", - (err) => this.onError(err) - ); - return config.all[path2]; - } - async fetch(remote) { - await this.git.fetch( - remote != void 0 ? [remote] : [], - (err) => this.onError(err) - ); - } - async setRemote(name, url) { - if ((await this.getRemotes()).includes(name)) - await this.git.remote( - ["set-url", name, url], - (err) => this.onError(err) - ); - else { - await this.git.remote( - ["add", name, url], - (err) => this.onError(err) - ); - } - } - async getRemoteBranches(remote) { - const res = await this.git.branch( - ["-r", "--list", `${remote}*`], - (err) => this.onError(err) - ); - const list = []; - for (const item in res.branches) { - list.push(res.branches[item].name); - } - return list; - } - async getRemotes() { - const res = await this.git.remote([], (err) => this.onError(err)); - if (res) { - return res.trim().split("\n"); - } else { - return []; - } - } - async removeRemote(remoteName) { - await this.git.removeRemote(remoteName); - } - async updateUpstreamBranch(remoteBranch) { - try { - await this.git.branch(["--set-upstream-to", remoteBranch]); - } catch (e) { - console.error(e); - try { - await this.git.branch(["--set-upstream", remoteBranch]); - } catch (e2) { - console.error(e2); - await this.git.push( - // A type error occurs here because the third element could be undefined. - // However, it is unlikely to be undefined due to the `remoteBranch`'s format, and error handling is in place. - // Therefore, we temporarily ignore the error. - // @ts-ignore - ["--set-upstream", ...splitRemoteBranch(remoteBranch)], - (err) => this.onError(err) - ); - } - } - } - updateGitPath(gitPath) { - this.setGitInstance(); - } - updateBasePath(basePath) { - this.setGitInstance(true); - } - async getDiffString(filePath, stagedChanges = false, hash2) { - if (stagedChanges) - return await this.git.diff(["--cached", "--", filePath]); - if (hash2) - return await this.git.show([`${hash2}`, "--", filePath]); - else - return await this.git.diff(["--", filePath]); - } - async diff(file, commit1, commit2) { - return await this.git.diff([`${commit1}..${commit2}`, "--", file]); - } - async getSubmoduleOfFile(repositoryRelativeFile) { - let submoduleRoot = await this.git.raw( - [ - "-C", - path.dirname(repositoryRelativeFile), - "rev-parse", - "--show-toplevel" - ], - (err) => err && console.warn("get-submodule-of-file", err == null ? void 0 : err.message) - ); - submoduleRoot = submoduleRoot.trim(); - const superProject = await this.git.raw( - [ - "-C", - path.dirname(repositoryRelativeFile), - "rev-parse", - "--show-superproject-working-tree" - ], - (err) => err && console.warn("get-submodule-of-file", err == null ? void 0 : err.message) - ); - if (superProject.trim() === "") { - return void 0; - } - const fsAdapter = this.app.vault.adapter; - const absolutePath = fsAdapter.getFullPath( - path.normalize(repositoryRelativeFile) - ); - const newRelativePath = path.relative(submoduleRoot, absolutePath); - return { submodule: submoduleRoot, relativeFilepath: newRelativePath }; - } - async getLastCommitTime() { - const res = await this.git.log({ n: 1 }, (err) => this.onError(err)); - if (res != null && res.latest != null) { - return new Date(res.latest.date); - } - } - isGitInstalled() { - const command = (0, import_child_process2.spawnSync)( - this.plugin.localStorage.getGitPath() || "git", - ["--version"], - { - stdio: "ignore" - } - ); - if (command.error) { - console.error(command.error); - return false; - } - return true; - } - onError(error) { - if (error) { - const networkFailure = error.message.contains("Could not resolve host") || error.message.match( - /ssh: connect to host .*? port .*?: Operation timed out/ - ) || error.message.match( - /ssh: connect to host .*? port .*?: Network is unreachable/ - ); - if (!networkFailure) { - this.plugin.displayError(error.message); - this.plugin.setState(0 /* idle */); - } else if (!this.plugin.offlineMode) { - this.plugin.displayError( - "Git: Going into offline mode. Future network errors will no longer be displayed.", - 2e3 - ); - } - if (networkFailure) { - this.plugin.offlineMode = true; - this.plugin.setState(0 /* idle */); - } - } - } -}; -var zeroCommit = { - hash: "000000", - isZeroCommit: true, - summary: "" -}; -function parseBlame(blameOutputUnnormalized) { - const blameOutput = blameOutputUnnormalized.replace("\r\n", "\n"); - const blameLines = blameOutput.split("\n"); - const result = { - commits: /* @__PURE__ */ new Map(), - hashPerLine: [void 0], - // one-based indices - originalFileLineNrPerLine: [void 0], - finalFileLineNrPerLine: [void 0], - groupSizePerStartingLine: /* @__PURE__ */ new Map() - }; - let line = 1; - for (let bi = 0; bi < blameLines.length; ) { - if (startsWithNonWhitespace(blameLines[bi])) { - const lineInfo = blameLines[bi].split(" "); - const commitHash = parseLineInfoInto(lineInfo, line, result); - bi++; - for (; startsWithNonWhitespace(blameLines[bi]); bi++) { - const spaceSeparatedHeaderValues = blameLines[bi].split(" "); - parseHeaderInto(spaceSeparatedHeaderValues, result, line); - } - finalizeBlameCommitInfo(result.commits.get(commitHash)); - line += 1; - } else if (blameLines[bi] === "" && bi === blameLines.length - 1) { - } else { - throw Error( - `Expected non-whitespace line or EOF, but found: ${blameLines[bi]}` - ); - } - bi++; - } - return result; -} -function parseLineInfoInto(lineInfo, line, result) { - const hash2 = lineInfo[0]; - result.hashPerLine.push(hash2); - result.originalFileLineNrPerLine.push(parseInt(lineInfo[1])); - result.finalFileLineNrPerLine.push(parseInt(lineInfo[2])); - lineInfo.length >= 4 && result.groupSizePerStartingLine.set(line, parseInt(lineInfo[3])); - if (parseInt(lineInfo[2]) !== line) { - throw Error( - `git-blame output is out of order: ${line} vs ${lineInfo[2]}` - ); - } - return hash2; -} -function parseHeaderInto(header, out, line) { - const key2 = header[0]; - const value = header.slice(1).join(" "); - const commitHash = out.hashPerLine[line]; - const commit2 = out.commits.get(commitHash) || { - hash: commitHash, - author: {}, - committer: {}, - previous: {} - }; - switch (key2) { - case "summary": - commit2.summary = value; - break; - case "author": - commit2.author.name = value; - break; - case "author-mail": - commit2.author.email = removeEmailBrackets(value); - break; - case "author-time": - commit2.author.epochSeconds = parseInt(value); - break; - case "author-tz": - commit2.author.tz = value; - break; - case "committer": - commit2.committer.name = value; - break; - case "committer-mail": - commit2.committer.email = removeEmailBrackets(value); - break; - case "committer-time": - commit2.committer.epochSeconds = parseInt(value); - break; - case "committer-tz": - commit2.committer.tz = value; - break; - case "previous": - commit2.previous.commitHash = value; - break; - case "filename": - commit2.previous.filename = value; - break; - } - out.commits.set(commitHash, commit2); -} -function finalizeBlameCommitInfo(commit2) { - if (commit2.summary === void 0) { - throw Error(`Summary not provided for commit: ${commit2.hash}`); - } - if (isUndefinedOrEmptyObject(commit2.author)) { - commit2.author = void 0; - } - if (isUndefinedOrEmptyObject(commit2.committer)) { - commit2.committer = void 0; - } - if (isUndefinedOrEmptyObject(commit2.previous)) { - commit2.previous = void 0; - } - commit2.isZeroCommit = Boolean(commit2.hash.match(/^0*$/)); -} -function isUndefinedOrEmptyObject(obj) { - return !obj || Object.keys(obj).length === 0; -} -function startsWithNonWhitespace(str) { - return str.length > 0 && str[0].trim() === str[0]; -} -function removeEmailBrackets(gitEmail) { - const prefixCleaned = gitEmail.startsWith("<") ? gitEmail.substring(1) : gitEmail; - return prefixCleaned.endsWith(">") ? prefixCleaned.substring(0, prefixCleaned.length - 1) : prefixCleaned; -} - -// src/lineAuthor/lineAuthorProvider.ts -init_polyfill_buffer(); -var import_state4 = require("@codemirror/state"); - -// src/lineAuthor/control.ts -init_polyfill_buffer(); -var import_state2 = require("@codemirror/state"); -var import_obsidian9 = require("obsidian"); - -// src/lineAuthor/eventsPerFilepath.ts -init_polyfill_buffer(); -var SECONDS = 1e3; -var REMOVE_STALES_FREQUENCY = 60 * SECONDS; -var EventsPerFilePath = class { - constructor() { - this.eventsPerFilepath = /* @__PURE__ */ new Map(); - this.startRemoveStalesSubscribersInterval(); - } - /** - * Run the {@link handler} on the subscribers to {@link filepath}. - */ - ifFilepathDefinedTransformSubscribers(filepath, handler) { - if (!filepath) - return; - this.ensureInitialized(filepath); - return handler(this.eventsPerFilepath.get(filepath)); - } - forEachSubscriber(handler) { - this.eventsPerFilepath.forEach((subs) => subs.forEach(handler)); - } - ensureInitialized(filepath) { - if (!this.eventsPerFilepath.get(filepath)) - this.eventsPerFilepath.set(filepath, /* @__PURE__ */ new Set()); - } - startRemoveStalesSubscribersInterval() { - this.removeStalesSubscribersTimer = window.setInterval( - () => this == null ? void 0 : this.forEachSubscriber((las) => las == null ? void 0 : las.removeIfStale()), - REMOVE_STALES_FREQUENCY - ); - } - clear() { - window.clearInterval(this.removeStalesSubscribersTimer); - this.eventsPerFilepath.clear(); - } -}; -var eventsPerFilePathSingleton = new EventsPerFilePath(); - -// src/lineAuthor/model.ts -init_polyfill_buffer(); -var import_state = require("@codemirror/state"); -var import_js_sha256 = __toESM(require_sha256()); - -// src/setting/settings.ts -init_polyfill_buffer(); -var import_obsidian8 = require("obsidian"); - -// src/gitManager/isomorphicGit.ts -init_polyfill_buffer(); - -// node_modules/.pnpm/diff@5.2.0/node_modules/diff/lib/index.mjs -init_polyfill_buffer(); -function Diff() { -} -Diff.prototype = { - diff: function diff(oldString, newString) { - var _options$timeout; - var options = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {}; - var callback = options.callback; - if (typeof options === "function") { - callback = options; - options = {}; - } - this.options = options; - var self2 = this; - function done(value) { - if (callback) { - setTimeout(function() { - callback(void 0, value); - }, 0); - return true; - } else { - return value; - } - } - oldString = this.castInput(oldString); - newString = this.castInput(newString); - oldString = this.removeEmpty(this.tokenize(oldString)); - newString = this.removeEmpty(this.tokenize(newString)); - var newLen = newString.length, oldLen = oldString.length; - var editLength = 1; - var maxEditLength = newLen + oldLen; - if (options.maxEditLength) { - maxEditLength = Math.min(maxEditLength, options.maxEditLength); - } - var maxExecutionTime = (_options$timeout = options.timeout) !== null && _options$timeout !== void 0 ? _options$timeout : Infinity; - var abortAfterTimestamp = Date.now() + maxExecutionTime; - var bestPath = [{ - oldPos: -1, - lastComponent: void 0 - }]; - var newPos = this.extractCommon(bestPath[0], newString, oldString, 0); - if (bestPath[0].oldPos + 1 >= oldLen && newPos + 1 >= newLen) { - return done([{ - value: this.join(newString), - count: newString.length - }]); - } - var minDiagonalToConsider = -Infinity, maxDiagonalToConsider = Infinity; - function execEditLength() { - for (var diagonalPath = Math.max(minDiagonalToConsider, -editLength); diagonalPath <= Math.min(maxDiagonalToConsider, editLength); diagonalPath += 2) { - var basePath = void 0; - var removePath = bestPath[diagonalPath - 1], addPath = bestPath[diagonalPath + 1]; - if (removePath) { - bestPath[diagonalPath - 1] = void 0; - } - var canAdd = false; - if (addPath) { - var addPathNewPos = addPath.oldPos - diagonalPath; - canAdd = addPath && 0 <= addPathNewPos && addPathNewPos < newLen; - } - var canRemove = removePath && removePath.oldPos + 1 < oldLen; - if (!canAdd && !canRemove) { - bestPath[diagonalPath] = void 0; - continue; - } - if (!canRemove || canAdd && removePath.oldPos + 1 < addPath.oldPos) { - basePath = self2.addToPath(addPath, true, void 0, 0); - } else { - basePath = self2.addToPath(removePath, void 0, true, 1); - } - newPos = self2.extractCommon(basePath, newString, oldString, diagonalPath); - if (basePath.oldPos + 1 >= oldLen && newPos + 1 >= newLen) { - return done(buildValues(self2, basePath.lastComponent, newString, oldString, self2.useLongestToken)); - } else { - bestPath[diagonalPath] = basePath; - if (basePath.oldPos + 1 >= oldLen) { - maxDiagonalToConsider = Math.min(maxDiagonalToConsider, diagonalPath - 1); - } - if (newPos + 1 >= newLen) { - minDiagonalToConsider = Math.max(minDiagonalToConsider, diagonalPath + 1); - } - } - } - editLength++; - } - if (callback) { - (function exec() { - setTimeout(function() { - if (editLength > maxEditLength || Date.now() > abortAfterTimestamp) { - return callback(); - } - if (!execEditLength()) { - exec(); - } - }, 0); - })(); - } else { - while (editLength <= maxEditLength && Date.now() <= abortAfterTimestamp) { - var ret = execEditLength(); - if (ret) { - return ret; - } - } - } - }, - addToPath: function addToPath(path2, added, removed, oldPosInc) { - var last2 = path2.lastComponent; - if (last2 && last2.added === added && last2.removed === removed) { - return { - oldPos: path2.oldPos + oldPosInc, - lastComponent: { - count: last2.count + 1, - added, - removed, - previousComponent: last2.previousComponent - } - }; - } else { - return { - oldPos: path2.oldPos + oldPosInc, - lastComponent: { - count: 1, - added, - removed, - previousComponent: last2 - } - }; - } - }, - extractCommon: function extractCommon(basePath, newString, oldString, diagonalPath) { - var newLen = newString.length, oldLen = oldString.length, oldPos = basePath.oldPos, newPos = oldPos - diagonalPath, commonCount = 0; - while (newPos + 1 < newLen && oldPos + 1 < oldLen && this.equals(newString[newPos + 1], oldString[oldPos + 1])) { - newPos++; - oldPos++; - commonCount++; - } - if (commonCount) { - basePath.lastComponent = { - count: commonCount, - previousComponent: basePath.lastComponent - }; - } - basePath.oldPos = oldPos; - return newPos; - }, - equals: function equals(left, right) { - if (this.options.comparator) { - return this.options.comparator(left, right); - } else { - return left === right || this.options.ignoreCase && left.toLowerCase() === right.toLowerCase(); - } - }, - removeEmpty: function removeEmpty(array) { - var ret = []; - for (var i = 0; i < array.length; i++) { - if (array[i]) { - ret.push(array[i]); - } - } - return ret; - }, - castInput: function castInput(value) { - return value; - }, - tokenize: function tokenize(value) { - return value.split(""); - }, - join: function join3(chars) { - return chars.join(""); - } -}; -function buildValues(diff3, lastComponent, newString, oldString, useLongestToken) { - var components = []; - var nextComponent; - while (lastComponent) { - components.push(lastComponent); - nextComponent = lastComponent.previousComponent; - delete lastComponent.previousComponent; - lastComponent = nextComponent; - } - components.reverse(); - var componentPos = 0, componentLen = components.length, newPos = 0, oldPos = 0; - for (; componentPos < componentLen; componentPos++) { - var component = components[componentPos]; - if (!component.removed) { - if (!component.added && useLongestToken) { - var value = newString.slice(newPos, newPos + component.count); - value = value.map(function(value2, i) { - var oldValue = oldString[oldPos + i]; - return oldValue.length > value2.length ? oldValue : value2; - }); - component.value = diff3.join(value); - } else { - component.value = diff3.join(newString.slice(newPos, newPos + component.count)); - } - newPos += component.count; - if (!component.added) { - oldPos += component.count; - } - } else { - component.value = diff3.join(oldString.slice(oldPos, oldPos + component.count)); - oldPos += component.count; - if (componentPos && components[componentPos - 1].added) { - var tmp = components[componentPos - 1]; - components[componentPos - 1] = components[componentPos]; - components[componentPos] = tmp; - } - } - } - var finalComponent = components[componentLen - 1]; - if (componentLen > 1 && typeof finalComponent.value === "string" && (finalComponent.added || finalComponent.removed) && diff3.equals("", finalComponent.value)) { - components[componentLen - 2].value += finalComponent.value; - components.pop(); - } - return components; -} -var characterDiff = new Diff(); -var extendedWordChars = /^[A-Za-z\xC0-\u02C6\u02C8-\u02D7\u02DE-\u02FF\u1E00-\u1EFF]+$/; -var reWhitespace = /\S/; -var wordDiff = new Diff(); -wordDiff.equals = function(left, right) { - if (this.options.ignoreCase) { - left = left.toLowerCase(); - right = right.toLowerCase(); - } - return left === right || this.options.ignoreWhitespace && !reWhitespace.test(left) && !reWhitespace.test(right); -}; -wordDiff.tokenize = function(value) { - var tokens = value.split(/([^\S\r\n]+|[()[\]{}'"\r\n]|\b)/); - for (var i = 0; i < tokens.length - 1; i++) { - if (!tokens[i + 1] && tokens[i + 2] && extendedWordChars.test(tokens[i]) && extendedWordChars.test(tokens[i + 2])) { - tokens[i] += tokens[i + 2]; - tokens.splice(i + 1, 2); - i--; - } - } - return tokens; -}; -var lineDiff = new Diff(); -lineDiff.tokenize = function(value) { - if (this.options.stripTrailingCr) { - value = value.replace(/\r\n/g, "\n"); - } - var retLines = [], linesAndNewlines = value.split(/(\n|\r\n)/); - if (!linesAndNewlines[linesAndNewlines.length - 1]) { - linesAndNewlines.pop(); - } - for (var i = 0; i < linesAndNewlines.length; i++) { - var line = linesAndNewlines[i]; - if (i % 2 && !this.options.newlineIsToken) { - retLines[retLines.length - 1] += line; - } else { - if (this.options.ignoreWhitespace) { - line = line.trim(); - } - retLines.push(line); - } - } - return retLines; -}; -function diffLines(oldStr, newStr, callback) { - return lineDiff.diff(oldStr, newStr, callback); -} -var sentenceDiff = new Diff(); -sentenceDiff.tokenize = function(value) { - return value.split(/(\S.+?[.!?])(?=\s+|$)/); -}; -var cssDiff = new Diff(); -cssDiff.tokenize = function(value) { - return value.split(/([{}:;,]|\s+)/); -}; -function _typeof(obj) { - "@babel/helpers - typeof"; - if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { - _typeof = function(obj2) { - return typeof obj2; - }; - } else { - _typeof = function(obj2) { - return obj2 && typeof Symbol === "function" && obj2.constructor === Symbol && obj2 !== Symbol.prototype ? "symbol" : typeof obj2; - }; - } - return _typeof(obj); -} -function _toConsumableArray(arr) { - return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); -} -function _arrayWithoutHoles(arr) { - if (Array.isArray(arr)) - return _arrayLikeToArray(arr); -} -function _iterableToArray(iter) { - if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) - return Array.from(iter); -} -function _unsupportedIterableToArray(o, minLen) { - if (!o) - return; - if (typeof o === "string") - return _arrayLikeToArray(o, minLen); - var n = Object.prototype.toString.call(o).slice(8, -1); - if (n === "Object" && o.constructor) - n = o.constructor.name; - if (n === "Map" || n === "Set") - return Array.from(o); - if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) - return _arrayLikeToArray(o, minLen); -} -function _arrayLikeToArray(arr, len) { - if (len == null || len > arr.length) - len = arr.length; - for (var i = 0, arr2 = new Array(len); i < len; i++) - arr2[i] = arr[i]; - return arr2; -} -function _nonIterableSpread() { - throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); -} -var objectPrototypeToString = Object.prototype.toString; -var jsonDiff = new Diff(); -jsonDiff.useLongestToken = true; -jsonDiff.tokenize = lineDiff.tokenize; -jsonDiff.castInput = function(value) { - var _this$options = this.options, undefinedReplacement = _this$options.undefinedReplacement, _this$options$stringi = _this$options.stringifyReplacer, stringifyReplacer = _this$options$stringi === void 0 ? function(k, v) { - return typeof v === "undefined" ? undefinedReplacement : v; - } : _this$options$stringi; - return typeof value === "string" ? value : JSON.stringify(canonicalize(value, null, null, stringifyReplacer), stringifyReplacer, " "); -}; -jsonDiff.equals = function(left, right) { - return Diff.prototype.equals.call(jsonDiff, left.replace(/,([\r\n])/g, "$1"), right.replace(/,([\r\n])/g, "$1")); -}; -function canonicalize(obj, stack, replacementStack, replacer, key2) { - stack = stack || []; - replacementStack = replacementStack || []; - if (replacer) { - obj = replacer(key2, obj); - } - var i; - for (i = 0; i < stack.length; i += 1) { - if (stack[i] === obj) { - return replacementStack[i]; - } - } - var canonicalizedObj; - if ("[object Array]" === objectPrototypeToString.call(obj)) { - stack.push(obj); - canonicalizedObj = new Array(obj.length); - replacementStack.push(canonicalizedObj); - for (i = 0; i < obj.length; i += 1) { - canonicalizedObj[i] = canonicalize(obj[i], stack, replacementStack, replacer, key2); - } - stack.pop(); - replacementStack.pop(); - return canonicalizedObj; - } - if (obj && obj.toJSON) { - obj = obj.toJSON(); - } - if (_typeof(obj) === "object" && obj !== null) { - stack.push(obj); - canonicalizedObj = {}; - replacementStack.push(canonicalizedObj); - var sortedKeys = [], _key; - for (_key in obj) { - if (obj.hasOwnProperty(_key)) { - sortedKeys.push(_key); - } - } - sortedKeys.sort(); - for (i = 0; i < sortedKeys.length; i += 1) { - _key = sortedKeys[i]; - canonicalizedObj[_key] = canonicalize(obj[_key], stack, replacementStack, replacer, _key); - } - stack.pop(); - replacementStack.pop(); - } else { - canonicalizedObj = obj; - } - return canonicalizedObj; -} -var arrayDiff = new Diff(); -arrayDiff.tokenize = function(value) { - return value.slice(); -}; -arrayDiff.join = arrayDiff.removeEmpty = function(value) { - return value; -}; -function structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) { - if (!options) { - options = {}; - } - if (typeof options.context === "undefined") { - options.context = 4; - } - var diff3 = diffLines(oldStr, newStr, options); - if (!diff3) { - return; - } - diff3.push({ - value: "", - lines: [] - }); - function contextLines(lines) { - return lines.map(function(entry) { - return " " + entry; - }); - } - var hunks = []; - var oldRangeStart = 0, newRangeStart = 0, curRange = [], oldLine = 1, newLine = 1; - var _loop = function _loop2(i2) { - var current = diff3[i2], lines = current.lines || current.value.replace(/\n$/, "").split("\n"); - current.lines = lines; - if (current.added || current.removed) { - var _curRange; - if (!oldRangeStart) { - var prev = diff3[i2 - 1]; - oldRangeStart = oldLine; - newRangeStart = newLine; - if (prev) { - curRange = options.context > 0 ? contextLines(prev.lines.slice(-options.context)) : []; - oldRangeStart -= curRange.length; - newRangeStart -= curRange.length; - } - } - (_curRange = curRange).push.apply(_curRange, _toConsumableArray(lines.map(function(entry) { - return (current.added ? "+" : "-") + entry; - }))); - if (current.added) { - newLine += lines.length; - } else { - oldLine += lines.length; - } - } else { - if (oldRangeStart) { - if (lines.length <= options.context * 2 && i2 < diff3.length - 2) { - var _curRange2; - (_curRange2 = curRange).push.apply(_curRange2, _toConsumableArray(contextLines(lines))); - } else { - var _curRange3; - var contextSize = Math.min(lines.length, options.context); - (_curRange3 = curRange).push.apply(_curRange3, _toConsumableArray(contextLines(lines.slice(0, contextSize)))); - var hunk = { - oldStart: oldRangeStart, - oldLines: oldLine - oldRangeStart + contextSize, - newStart: newRangeStart, - newLines: newLine - newRangeStart + contextSize, - lines: curRange - }; - if (i2 >= diff3.length - 2 && lines.length <= options.context) { - var oldEOFNewline = /\n$/.test(oldStr); - var newEOFNewline = /\n$/.test(newStr); - var noNlBeforeAdds = lines.length == 0 && curRange.length > hunk.oldLines; - if (!oldEOFNewline && noNlBeforeAdds && oldStr.length > 0) { - curRange.splice(hunk.oldLines, 0, "\\ No newline at end of file"); - } - if (!oldEOFNewline && !noNlBeforeAdds || !newEOFNewline) { - curRange.push("\\ No newline at end of file"); - } - } - hunks.push(hunk); - oldRangeStart = 0; - newRangeStart = 0; - curRange = []; - } - } - oldLine += lines.length; - newLine += lines.length; - } - }; - for (var i = 0; i < diff3.length; i++) { - _loop(i); - } - return { - oldFileName, - newFileName, - oldHeader, - newHeader, - hunks - }; -} -function formatPatch(diff3) { - if (Array.isArray(diff3)) { - return diff3.map(formatPatch).join("\n"); - } - var ret = []; - if (diff3.oldFileName == diff3.newFileName) { - ret.push("Index: " + diff3.oldFileName); - } - ret.push("==================================================================="); - ret.push("--- " + diff3.oldFileName + (typeof diff3.oldHeader === "undefined" ? "" : " " + diff3.oldHeader)); - ret.push("+++ " + diff3.newFileName + (typeof diff3.newHeader === "undefined" ? "" : " " + diff3.newHeader)); - for (var i = 0; i < diff3.hunks.length; i++) { - var hunk = diff3.hunks[i]; - if (hunk.oldLines === 0) { - hunk.oldStart -= 1; - } - if (hunk.newLines === 0) { - hunk.newStart -= 1; - } - ret.push("@@ -" + hunk.oldStart + "," + hunk.oldLines + " +" + hunk.newStart + "," + hunk.newLines + " @@"); - ret.push.apply(ret, hunk.lines); - } - return ret.join("\n") + "\n"; -} -function createTwoFilesPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) { - return formatPatch(structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options)); -} -function createPatch(fileName, oldStr, newStr, oldHeader, newHeader, options) { - return createTwoFilesPatch(fileName, fileName, oldStr, newStr, oldHeader, newHeader, options); -} - -// src/gitManager/isomorphicGit.ts -var import_obsidian7 = require("obsidian"); - -// src/ui/modals/generalModal.ts -init_polyfill_buffer(); -var import_obsidian5 = require("obsidian"); -var generalModalConfigDefaults = { - options: [], - placeholder: "", - allowEmpty: false, - onlySelection: false, - initialValue: void 0 -}; -var GeneralModal = class extends import_obsidian5.SuggestModal { - constructor(config) { - super(app); - this.config = { ...generalModalConfigDefaults, ...config }; - this.setPlaceholder(this.config.placeholder); - } - open() { - super.open(); - if (this.config.initialValue != void 0) { - this.inputEl.value = this.config.initialValue; - this.inputEl.dispatchEvent(new Event("input")); - } - return new Promise((resolve) => { - this.resolve = resolve; - }); - } - selectSuggestion(value, evt) { - if (this.resolve) { - let res; - if (this.config.allowEmpty && value === " ") - res = ""; - else if (value === "...") - res = void 0; - else - res = value; - this.resolve(res); - } - super.selectSuggestion(value, evt); - } - onClose() { - if (this.resolve) - this.resolve(void 0); - } - getSuggestions(query) { - if (this.config.onlySelection) { - return this.config.options; - } else if (this.config.allowEmpty) { - return [query.length > 0 ? query : " ", ...this.config.options]; - } else { - return [query.length > 0 ? query : "...", ...this.config.options]; - } - } - renderSuggestion(value, el) { - el.setText(value); - } - onChooseSuggestion(item, evt) { - } -}; - -// src/gitManager/myAdapter.ts -init_polyfill_buffer(); -var import_obsidian6 = require("obsidian"); -var MyAdapter = class { - constructor(vault, plugin) { - this.plugin = plugin; - this.promises = {}; - this.adapter = vault.adapter; - this.vault = vault; - this.lastBasePath = this.plugin.settings.basePath; - this.promises.readFile = this.readFile.bind(this); - this.promises.writeFile = this.writeFile.bind(this); - this.promises.readdir = this.readdir.bind(this); - this.promises.mkdir = this.mkdir.bind(this); - this.promises.rmdir = this.rmdir.bind(this); - this.promises.stat = this.stat.bind(this); - this.promises.unlink = this.unlink.bind(this); - this.promises.lstat = this.lstat.bind(this); - this.promises.readlink = this.readlink.bind(this); - this.promises.symlink = this.symlink.bind(this); - } - async readFile(path2, opts) { - var _a2; - this.maybeLog("Read: " + path2 + JSON.stringify(opts)); - if (opts == "utf8" || opts.encoding == "utf8") { - const file = this.vault.getAbstractFileByPath(path2); - if (file instanceof import_obsidian6.TFile) { - this.maybeLog("Reuse"); - return this.vault.read(file); - } else { - return this.adapter.read(path2); - } - } else { - if (path2.endsWith(this.gitDir + "/index")) { - if (this.plugin.settings.basePath != this.lastBasePath) { - this.clearIndex(); - this.lastBasePath = this.plugin.settings.basePath; - return this.adapter.readBinary(path2); - } - return (_a2 = this.index) != null ? _a2 : this.adapter.readBinary(path2); - } - const file = this.vault.getAbstractFileByPath(path2); - if (file instanceof import_obsidian6.TFile) { - this.maybeLog("Reuse"); - return this.vault.readBinary(file); - } else { - return this.adapter.readBinary(path2); - } - } - } - async writeFile(path2, data) { - this.maybeLog("Write: " + path2); - if (typeof data === "string") { - const file = this.vault.getAbstractFileByPath(path2); - if (file instanceof import_obsidian6.TFile) { - return this.vault.modify(file, data); - } else { - return this.adapter.write(path2, data); - } - } else { - if (path2.endsWith(this.gitDir + "/index")) { - this.index = data; - this.indexmtime = Date.now(); - } else { - const file = this.vault.getAbstractFileByPath(path2); - if (file instanceof import_obsidian6.TFile) { - return this.vault.modifyBinary(file, data); - } else { - return this.adapter.writeBinary(path2, data); - } - } - } - } - async readdir(path2) { - if (path2 === ".") - path2 = "/"; - const res = await this.adapter.list(path2); - const all = [...res.files, ...res.folders]; - let formattedAll; - if (path2 !== "/") { - formattedAll = all.map( - (e) => (0, import_obsidian6.normalizePath)(e.substring(path2.length)) - ); - } else { - formattedAll = all; - } - return formattedAll; - } - async mkdir(path2) { - return this.adapter.mkdir(path2); - } - async rmdir(path2, opts) { - var _a2, _b; - return this.adapter.rmdir(path2, (_b = (_a2 = opts == null ? void 0 : opts.options) == null ? void 0 : _a2.recursive) != null ? _b : false); - } - async stat(path2) { - if (path2.endsWith(this.gitDir + "/index")) { - if (this.index !== void 0 && this.indexctime != void 0 && this.indexmtime != void 0) { - return { - isFile: () => true, - isDirectory: () => false, - isSymbolicLink: () => false, - size: this.index.length, - type: "file", - ctimeMs: this.indexctime, - mtimeMs: this.indexmtime - }; - } else { - const stat = await this.adapter.stat(path2); - if (stat == void 0) { - throw { code: "ENOENT" }; - } - this.indexctime = stat.ctime; - this.indexmtime = stat.mtime; - return { - ctimeMs: stat.ctime, - mtimeMs: stat.mtime, - size: stat.size, - type: "file", - isFile: () => true, - isDirectory: () => false, - isSymbolicLink: () => false - }; - } - } - if (path2 === ".") - path2 = "/"; - const file = this.vault.getAbstractFileByPath(path2); - this.maybeLog("Stat: " + path2); - if (file instanceof import_obsidian6.TFile) { - this.maybeLog("Reuse stat"); - return { - ctimeMs: file.stat.ctime, - mtimeMs: file.stat.mtime, - size: file.stat.size, - type: "file", - isFile: () => true, - isDirectory: () => false, - isSymbolicLink: () => false - }; - } else { - const stat = await this.adapter.stat(path2); - if (stat) { - return { - ctimeMs: stat.ctime, - mtimeMs: stat.mtime, - size: stat.size, - type: stat.type === "folder" ? "directory" : stat.type, - isFile: () => stat.type === "file", - isDirectory: () => stat.type === "folder", - isSymbolicLink: () => false - }; - } else { - throw { code: "ENOENT" }; - } - } - } - async unlink(path2) { - return this.adapter.remove(path2); - } - async lstat(path2) { - return this.stat(path2); - } - async readlink(path2) { - throw new Error(`readlink of (${path2}) is not implemented.`); - } - async symlink(path2) { - throw new Error(`symlink of (${path2}) is not implemented.`); - } - async saveAndClear() { - if (this.index !== void 0) { - await this.adapter.writeBinary( - this.plugin.gitManager.getRelativeVaultPath( - this.gitDir + "/index" - ), - this.index, - { - ctime: this.indexctime, - mtime: this.indexmtime - } - ); - } - this.clearIndex(); - } - clearIndex() { - this.index = void 0; - this.indexctime = void 0; - this.indexmtime = void 0; - } - get gitDir() { - return this.plugin.settings.gitDir || ".git"; - } - maybeLog(text2) { - } -}; - -// src/gitManager/isomorphicGit.ts -var IsomorphicGit = class extends GitManager { - constructor(plugin) { - super(plugin); - this.FILE = 0; - this.HEAD = 1; - this.WORKDIR = 2; - this.STAGE = 3; - // Mapping from statusMatrix to git status codes based off git status --short - // See: https://isomorphic-git.org/docs/en/statusMatrix - this.status_mapping = { - "000": " ", - "003": "AD", - "020": "??", - "022": "A ", - "023": "AM", - "100": "D ", - "101": " D", - "103": "MD", - "110": "DA", - // Technically, two files: first one is deleted "D " and second one is untracked "??" - "111": " ", - "113": "MM", - "120": "DA", - // Same as "110" - "121": " M", - "122": "M ", - "123": "MM" - }; - this.noticeLength = 999999; - this.fs = new MyAdapter(this.app.vault, this.plugin); - } - getRepo() { - return { - fs: this.fs, - dir: this.plugin.settings.basePath, - gitdir: this.plugin.settings.gitDir || void 0, - onAuth: () => { - var _a2, _b; - return { - username: (_a2 = this.plugin.localStorage.getUsername()) != null ? _a2 : void 0, - password: (_b = this.plugin.localStorage.getPassword()) != null ? _b : void 0 - }; - }, - onAuthFailure: async () => { - new import_obsidian7.Notice( - "Authentication failed. Please try with different credentials" - ); - const username = await new GeneralModal({ - placeholder: "Specify your username" - }).open(); - if (username) { - const password = await new GeneralModal({ - placeholder: "Specify your password/personal access token" - }).open(); - if (password) { - this.plugin.localStorage.setUsername(username); - this.plugin.localStorage.setPassword(password); - return { - username, - password - }; - } - } - return { cancel: true }; - }, - http: { - async request({ - url, - method: method2, - headers, - body - }) { - if (body) { - body = await collect2(body); - body = body.buffer; - } - const res = await (0, import_obsidian7.requestUrl)({ - url, - method: method2, - headers, - body, - throw: false - }); - return { - url, - method: method2, - headers: res.headers, - body: [new Uint8Array(res.arrayBuffer)], - statusCode: res.status, - statusMessage: res.status.toString() - }; - } - } - }; - } - async wrapFS(call) { - try { - const res = await call; - await this.fs.saveAndClear(); - return res; - } catch (error) { - await this.fs.saveAndClear(); - throw error; - } - } - async status() { - let notice; - const timeout = window.setTimeout(function() { - notice = new import_obsidian7.Notice( - "This takes longer: Getting status", - this.noticeLength - ); - }, 2e4); - try { - this.plugin.setState(1 /* status */); - const status2 = (await this.wrapFS(isomorphic_git_default.statusMatrix({ ...this.getRepo() }))).map((row) => this.getFileStatusResult(row)); - const changed = status2.filter( - (fileStatus) => fileStatus.working_dir !== " " - ); - const staged = status2.filter( - (fileStatus) => fileStatus.index !== " " && fileStatus.index !== "U" - ); - const conflicted = []; - window.clearTimeout(timeout); - notice == null ? void 0 : notice.hide(); - return { all: status2, changed, staged, conflicted }; - } catch (error) { - window.clearTimeout(timeout); - notice == null ? void 0 : notice.hide(); - this.plugin.displayError(error); - throw error; - } - } - async commitAll({ - message, - status: status2, - unstagedFiles - }) { - try { - await this.checkAuthorInfo(); - await this.stageAll({ status: status2, unstagedFiles }); - return this.commit({ message }); - } catch (error) { - this.plugin.displayError(error); - throw error; - } - } - async commit({ - message - }) { - try { - await this.checkAuthorInfo(); - this.plugin.setState(4 /* commit */); - const formatMessage = await this.formatCommitMessage(message); - const hadConflict = this.plugin.localStorage.getConflict(); - let parent = void 0; - if (hadConflict) { - const branchInfo = await this.branchInfo(); - parent = [branchInfo.current, branchInfo.tracking]; - } - await this.wrapFS( - isomorphic_git_default.commit({ - ...this.getRepo(), - message: formatMessage, - parent - }) - ); - this.plugin.localStorage.setConflict(false); - return; - } catch (error) { - this.plugin.displayError(error); - throw error; - } - } - async stage(filepath, relativeToVault) { - const gitPath = this.getRelativeRepoPath(filepath, relativeToVault); - let vaultPath; - if (relativeToVault) { - vaultPath = filepath; - } else { - vaultPath = this.getRelativeVaultPath(filepath); - } - try { - this.plugin.setState(3 /* add */); - if (await this.app.vault.adapter.exists(vaultPath)) { - await this.wrapFS( - isomorphic_git_default.add({ ...this.getRepo(), filepath: gitPath }) - ); - } else { - await this.wrapFS( - isomorphic_git_default.remove({ ...this.getRepo(), filepath: gitPath }) - ); - } - } catch (error) { - this.plugin.displayError(error); - throw error; - } - } - async stageAll({ - dir, - status: status2, - unstagedFiles - }) { - try { - if (status2) { - await Promise.all( - status2.changed.map( - (file) => file.working_dir !== "D" ? this.wrapFS( - isomorphic_git_default.add({ - ...this.getRepo(), - filepath: file.path - }) - ) : isomorphic_git_default.remove({ - ...this.getRepo(), - filepath: file.path - }) - ) - ); - } else { - const filesToStage = unstagedFiles != null ? unstagedFiles : await this.getUnstagedFiles(dir != null ? dir : "."); - await Promise.all( - filesToStage.map( - ({ filepath, deleted }) => deleted ? isomorphic_git_default.remove({ ...this.getRepo(), filepath }) : this.wrapFS( - isomorphic_git_default.add({ ...this.getRepo(), filepath }) - ) - ) - ); - } - } catch (error) { - this.plugin.displayError(error); - throw error; - } - } - async unstage(filepath, relativeToVault) { - try { - this.plugin.setState(3 /* add */); - filepath = this.getRelativeRepoPath(filepath, relativeToVault); - await this.wrapFS( - isomorphic_git_default.resetIndex({ ...this.getRepo(), filepath }) - ); - } catch (error) { - this.plugin.displayError(error); - throw error; - } - } - async unstageAll({ - dir, - status: status2 - }) { - try { - let staged; - if (status2) { - staged = status2.staged.map((file) => file.path); - } else { - const res = await this.getStagedFiles(dir != null ? dir : "."); - staged = res.map(({ filepath }) => filepath); - } - await this.wrapFS( - Promise.all( - staged.map( - (file) => isomorphic_git_default.resetIndex({ ...this.getRepo(), filepath: file }) - ) - ) - ); - } catch (error) { - this.plugin.displayError(error); - throw error; - } - } - async discard(filepath) { - try { - this.plugin.setState(3 /* add */); - await this.wrapFS( - isomorphic_git_default.checkout({ - ...this.getRepo(), - filepaths: [filepath], - force: true - }) - ); - } catch (error) { - this.plugin.displayError(error); - throw error; - } - } - async discardAll({ - dir, - status: status2 - }) { - let files = []; - if (status2) { - if (dir != void 0) { - files = status2.changed.filter((file) => file.path.startsWith(dir)).map((file) => file.path); - } else { - files = status2.changed.map((file) => file.path); - } - } else { - files = (await this.getUnstagedFiles(dir)).map( - ({ filepath }) => filepath - ); - } - try { - await this.wrapFS( - isomorphic_git_default.checkout({ - ...this.getRepo(), - filepaths: files, - force: true - }) - ); - } catch (error) { - this.plugin.displayError(error); - throw error; - } - } - getProgressText(action, event) { - let out = `${action} progress:`; - if (event.phase) { - out = `${out} ${event.phase}:`; - } - if (event.loaded) { - out = `${out} ${event.loaded}`; - if (event.total) { - out = `${out} of ${event.total}`; - } - } - return out; - } - resolveRef(ref) { - return this.wrapFS(isomorphic_git_default.resolveRef({ ...this.getRepo(), ref })); - } - async pull() { - const progressNotice = this.showNotice("Initializing pull"); - try { - this.plugin.setState(2 /* pull */); - const localCommit = await this.resolveRef("HEAD"); - await this.fetch(); - const branchInfo = await this.branchInfo(); - await this.checkAuthorInfo(); - const mergeRes = await this.wrapFS( - isomorphic_git_default.merge({ - ...this.getRepo(), - ours: branchInfo.current, - theirs: branchInfo.tracking, - abortOnConflict: false - }) - ); - if (!mergeRes.alreadyMerged) { - await this.wrapFS( - isomorphic_git_default.checkout({ - ...this.getRepo(), - ref: branchInfo.current, - onProgress: (progress) => { - if (progressNotice !== void 0) { - progressNotice.noticeEl.innerText = this.getProgressText("Checkout", progress); - } - }, - remote: branchInfo.remote - }) - ); - } - progressNotice == null ? void 0 : progressNotice.hide(); - const upstreamCommit = await this.resolveRef("HEAD"); - const changedFiles = await this.getFileChangesCount( - localCommit, - upstreamCommit - ); - this.showNotice("Finished pull", false); - return changedFiles.map((file) => ({ - path: file.path, - working_dir: "P", - index: "P", - vault_path: this.getRelativeVaultPath(file.path) - })); - } catch (error) { - progressNotice == null ? void 0 : progressNotice.hide(); - if (error instanceof Errors.MergeConflictError) { - this.plugin.handleConflict( - error.data.filepaths.map( - (file) => this.getRelativeVaultPath(file) - ) - ); - } - this.plugin.displayError(error); - throw error; - } - } - async push() { - if (!await this.canPush()) { - return 0; - } - const progressNotice = this.showNotice("Initializing push"); - try { - this.plugin.setState(1 /* status */); - const status2 = await this.branchInfo(); - const trackingBranch = status2.tracking; - const currentBranch2 = status2.current; - const numChangedFiles = (await this.getFileChangesCount(currentBranch2, trackingBranch)).length; - this.plugin.setState(5 /* push */); - await this.wrapFS( - isomorphic_git_default.push({ - ...this.getRepo(), - onProgress: (progress) => { - if (progressNotice !== void 0) { - progressNotice.noticeEl.innerText = this.getProgressText("Pushing", progress); - } - } - }) - ); - progressNotice == null ? void 0 : progressNotice.hide(); - return numChangedFiles; - } catch (error) { - progressNotice == null ? void 0 : progressNotice.hide(); - this.plugin.displayError(error); - throw error; - } - } - async getUnpushedCommits() { - const status2 = await this.branchInfo(); - const trackingBranch = status2.tracking; - const currentBranch2 = status2.current; - if (trackingBranch == null || currentBranch2 == null) { - return 0; - } - const localCommit = await this.resolveRef(currentBranch2); - const upstreamCommit = await this.resolveRef(trackingBranch); - const changedFiles = await this.getFileChangesCount( - localCommit, - upstreamCommit - ); - return changedFiles.length; - } - async canPush() { - const status2 = await this.branchInfo(); - const trackingBranch = status2.tracking; - const currentBranch2 = status2.current; - const current = await this.resolveRef(currentBranch2); - const tracking = await this.resolveRef(trackingBranch); - return current != tracking; - } - async checkRequirements() { - const headExists = await this.plugin.app.vault.adapter.exists( - `${this.getRepo().dir}/.git/HEAD` - ); - return headExists ? "valid" : "missing-repo"; - } - async branchInfo() { - var _a2, _b; - try { - const current = await isomorphic_git_default.currentBranch(this.getRepo()) || ""; - const branches = await isomorphic_git_default.listBranches(this.getRepo()); - const remote = (_a2 = await this.getConfig(`branch.${current}.remote`)) != null ? _a2 : "origin"; - const trackingBranch = (_b = await this.getConfig(`branch.${current}.merge`)) == null ? void 0 : _b.split("refs/heads")[1]; - const tracking = trackingBranch ? remote + trackingBranch : void 0; - return { - current, - tracking, - branches, - remote - }; - } catch (error) { - this.plugin.displayError(error); - throw error; - } - } - async getCurrentRemote() { - var _a2; - const current = await isomorphic_git_default.currentBranch(this.getRepo()) || ""; - const remote = (_a2 = await this.getConfig(`branch.${current}.remote`)) != null ? _a2 : "origin"; - return remote; - } - async checkout(branch2, remote) { - try { - return this.wrapFS( - isomorphic_git_default.checkout({ - ...this.getRepo(), - ref: branch2, - force: !!remote, - remote - }) - ); - } catch (error) { - this.plugin.displayError(error); - throw error; - } - } - async createBranch(branch2) { - try { - await this.wrapFS( - isomorphic_git_default.branch({ ...this.getRepo(), ref: branch2, checkout: true }) - ); - } catch (error) { - this.plugin.displayError(error); - throw error; - } - } - async deleteBranch(branch2) { - try { - await this.wrapFS( - isomorphic_git_default.deleteBranch({ ...this.getRepo(), ref: branch2 }) - ); - } catch (error) { - this.plugin.displayError(error); - throw error; - } - } - async branchIsMerged(_) { - return true; - } - async init() { - try { - await this.wrapFS(isomorphic_git_default.init(this.getRepo())); - } catch (error) { - this.plugin.displayError(error); - throw error; - } - } - async clone(url, dir, depth) { - const progressNotice = this.showNotice("Initializing clone"); - try { - await this.wrapFS( - isomorphic_git_default.clone({ - ...this.getRepo(), - dir, - url, - depth, - onProgress: (progress) => { - if (progressNotice !== void 0) { - progressNotice.noticeEl.innerText = this.getProgressText("Cloning", progress); - } - } - }) - ); - progressNotice == null ? void 0 : progressNotice.hide(); - } catch (error) { - progressNotice == null ? void 0 : progressNotice.hide(); - this.plugin.displayError(error); - throw error; - } - } - async setConfig(path2, value) { - try { - return this.wrapFS( - isomorphic_git_default.setConfig({ - ...this.getRepo(), - path: path2, - value - }) - ); - } catch (error) { - this.plugin.displayError(error); - throw error; - } - } - async getConfig(path2) { - try { - return this.wrapFS( - isomorphic_git_default.getConfig({ - ...this.getRepo(), - path: path2 - }) - ); - } catch (error) { - this.plugin.displayError(error); - throw error; - } - } - async fetch(remote) { - const progressNotice = this.showNotice("Initializing fetch"); - try { - const args = { - ...this.getRepo(), - onProgress: (progress) => { - if (progressNotice !== void 0) { - progressNotice.noticeEl.innerText = this.getProgressText("Fetching", progress); - } - }, - remote: remote != null ? remote : await this.getCurrentRemote() - }; - await this.wrapFS(isomorphic_git_default.fetch(args)); - progressNotice == null ? void 0 : progressNotice.hide(); - } catch (error) { - this.plugin.displayError(error); - progressNotice == null ? void 0 : progressNotice.hide(); - throw error; - } - } - async setRemote(name, url) { - try { - await this.wrapFS( - isomorphic_git_default.addRemote({ - ...this.getRepo(), - remote: name, - url, - force: true - }) - ); - } catch (error) { - this.plugin.displayError(error); - throw error; - } - } - async getRemoteBranches(remote) { - let remoteBranches = []; - remoteBranches.push( - ...await this.wrapFS( - isomorphic_git_default.listBranches({ ...this.getRepo(), remote }) - ) - ); - remoteBranches.remove("HEAD"); - remoteBranches = remoteBranches.map((e) => `${remote}/${e}`); - return remoteBranches; - } - async getRemotes() { - return (await this.wrapFS(isomorphic_git_default.listRemotes({ ...this.getRepo() }))).map( - (remoteUrl) => remoteUrl.remote - ); - } - async removeRemote(remoteName) { - await this.wrapFS( - isomorphic_git_default.deleteRemote({ ...this.getRepo(), remote: remoteName }) - ); - } - async getRemoteUrl(remote) { - var _a2; - return (_a2 = (await this.wrapFS(isomorphic_git_default.listRemotes({ ...this.getRepo() }))).filter((item) => item.remote == remote)[0]) == null ? void 0 : _a2.url; - } - async log(_, __ = true, limit) { - const logs = await this.wrapFS( - isomorphic_git_default.log({ ...this.getRepo(), depth: limit }) - ); - return Promise.all( - logs.map(async (log2) => { - const completeMessage = log2.commit.message.split("\n\n"); - return { - message: completeMessage[0], - author: { - name: log2.commit.author.name, - email: log2.commit.author.email - }, - body: completeMessage.slice(1).join("\n\n"), - date: new Date( - log2.commit.committer.timestamp - ).toDateString(), - diff: { - changed: 0, - files: (await this.getFileChangesCount( - log2.commit.parent.first(), - log2.oid - )).map((item) => { - return { - path: item.path, - status: item.type, - vault_path: this.getRelativeVaultPath( - item.path - ), - hash: log2.oid, - binary: void 0 - }; - }) - }, - hash: log2.oid, - refs: [] - }; - }) - ); - } - updateBasePath(basePath) { - this.getRepo().dir = basePath; - } - async updateUpstreamBranch(remoteBranch) { - const [remote, branch2] = splitRemoteBranch(remoteBranch); - const branchInfo = await this.branchInfo(); - await this.setConfig( - `branch.${branchInfo.current}.merge`, - `refs/heads/${branch2}` - ); - await this.setConfig(`branch.${branch2}.remote`, remote); - } - updateGitPath(_) { - return; - } - async getFileChangesCount(commitHash1, commitHash2) { - return this.walkDifference({ - walkers: [ - isomorphic_git_default.TREE({ ref: commitHash1 }), - isomorphic_git_default.TREE({ ref: commitHash2 }) - ] - }); - } - async walkDifference({ - walkers, - dir: base - }) { - const res = await this.wrapFS( - isomorphic_git_default.walk({ - ...this.getRepo(), - trees: walkers, - map: async function(filepath, [A, B]) { - if (!worthWalking2(filepath, base)) { - return null; - } - if (await (A == null ? void 0 : A.type()) === "tree" || await (B == null ? void 0 : B.type()) === "tree") { - return; - } - const Aoid = await (A == null ? void 0 : A.oid()); - const Boid = await (B == null ? void 0 : B.oid()); - let type = "equal"; - if (Aoid !== Boid) { - type = "M"; - } - if (Aoid === void 0) { - type = "A"; - } - if (Boid === void 0) { - type = "D"; - } - if (Aoid === void 0 && Boid === void 0) { - console.log("Something weird happened:"); - console.log(A); - console.log(B); - } - if (type === "equal") { - return; - } - return { - path: filepath, - type - }; - } - }) - ); - return res; - } - async getStagedFiles(dir = ".") { - const res = await this.walkDifference({ - walkers: [isomorphic_git_default.TREE({ ref: "HEAD" }), isomorphic_git_default.STAGE()], - dir - }); - return res.map((file) => { - return { - vault_path: this.getRelativeVaultPath(file.path), - filepath: file.path - }; - }); - } - async getUnstagedFiles(base = ".") { - let notice; - const timeout = window.setTimeout(function() { - notice = new import_obsidian7.Notice( - "This takes longer: Getting status", - this.noticeLength - ); - }, 2e4); - try { - const repo = this.getRepo(); - const res = await this.wrapFS( - //Modified from `git.statusMatrix` - isomorphic_git_default.walk({ - ...repo, - trees: [isomorphic_git_default.WORKDIR(), isomorphic_git_default.STAGE()], - map: async function(filepath, [workdir, stage]) { - if (!stage && workdir) { - const isIgnored2 = await isomorphic_git_default.isIgnored({ - ...repo, - filepath - }); - if (isIgnored2) { - return null; - } - } - if (!worthWalking2(filepath, base)) { - return null; - } - const [workdirType, stageType] = await Promise.all([ - workdir && workdir.type(), - stage && stage.type() - ]); - const isBlob = [workdirType, stageType].includes( - "blob" - ); - if ((workdirType === "tree" || workdirType === "special") && !isBlob) - return; - if (stageType === "commit") - return null; - if ((stageType === "tree" || stageType === "special") && !isBlob) - return; - const stageOid = stageType === "blob" ? await stage.oid() : void 0; - let workdirOid; - if (workdirType === "blob" && stageType !== "blob") { - workdirOid = "42"; - } else if (workdirType === "blob") { - workdirOid = await workdir.oid(); - } - if (!workdirOid) { - return { - filepath, - deleted: true - }; - } - if (workdirOid !== stageOid) { - return { - filepath, - deleted: false - }; - } - return null; - } - }) - ); - window.clearTimeout(timeout); - notice == null ? void 0 : notice.hide(); - return res; - } catch (error) { - window.clearTimeout(timeout); - notice == null ? void 0 : notice.hide(); - this.plugin.displayError(error); - throw error; - } - } - async getDiffString(filePath, stagedChanges = false, hash2) { - const vaultPath = this.getRelativeVaultPath(filePath); - const map = async (file, [A]) => { - if (filePath == file) { - const oid = await A.oid(); - const contents = await isomorphic_git_default.readBlob({ - ...this.getRepo(), - oid - }); - return contents.blob; - } - }; - if (hash2) { - const commitContent = await readBlob({ - ...this.getRepo(), - filepath: filePath, - oid: hash2 - }).then((headBlob) => new TextDecoder().decode(headBlob.blob)).catch((err) => { - if (err instanceof isomorphic_git_default.Errors.NotFoundError) - return void 0; - throw err; - }); - const commit2 = await isomorphic_git_default.readCommit({ - ...this.getRepo(), - oid: hash2 - }); - const previousContent = await readBlob({ - ...this.getRepo(), - filepath: filePath, - oid: commit2.commit.parent.first() - }).then((headBlob) => new TextDecoder().decode(headBlob.blob)).catch((err) => { - if (err instanceof isomorphic_git_default.Errors.NotFoundError) - return void 0; - throw err; - }); - const diff3 = createPatch( - vaultPath, - previousContent != null ? previousContent : "", - commitContent != null ? commitContent : "" - ); - return diff3; - } - const stagedBlob = (await isomorphic_git_default.walk({ - ...this.getRepo(), - trees: [isomorphic_git_default.STAGE()], - map - })).first(); - const stagedContent = new TextDecoder().decode(stagedBlob); - if (stagedChanges) { - const headContent = await this.resolveRef("HEAD").then( - (oid) => readBlob({ - ...this.getRepo(), - filepath: filePath, - oid - }) - ).then((headBlob) => new TextDecoder().decode(headBlob.blob)).catch((err) => { - if (err instanceof isomorphic_git_default.Errors.NotFoundError) - return void 0; - throw err; - }); - const diff3 = createPatch( - vaultPath, - headContent != null ? headContent : "", - stagedContent - ); - return diff3; - } else { - let workdirContent; - if (await this.app.vault.adapter.exists(vaultPath)) { - workdirContent = await this.app.vault.adapter.read(vaultPath); - } else { - workdirContent = ""; - } - const diff3 = createPatch(vaultPath, stagedContent, workdirContent); - return diff3; - } - } - async getLastCommitTime() { - const repo = this.getRepo(); - const oid = await this.resolveRef("HEAD"); - const commit2 = await isomorphic_git_default.readCommit({ ...repo, oid }); - const date = commit2.commit.committer.timestamp; - return new Date(date * 1e3); - } - getFileStatusResult(row) { - const status2 = this.status_mapping[`${row[this.HEAD]}${row[this.WORKDIR]}${row[this.STAGE]}`]; - return { - index: status2[0] == "?" ? "U" : status2[0], - working_dir: status2[1] == "?" ? "U" : status2[1], - path: row[this.FILE], - vault_path: this.getRelativeVaultPath(row[this.FILE]) - }; - } - async checkAuthorInfo() { - const name = await this.getConfig("user.name"); - const email = await this.getConfig("user.email"); - if (!name || !email) { - throw "Git author information is not set. Please set it in the settings."; - } - } - showNotice(message, infinity = true) { - if (!this.plugin.settings.disablePopups) { - return new import_obsidian7.Notice( - message, - infinity ? this.noticeLength : void 0 - ); - } - } -}; -function fromValue2(value) { - let queue = [value]; - return { - next() { - return Promise.resolve({ - done: queue.length === 0, - value: queue.pop() - }); - }, - return() { - queue = []; - return {}; - }, - [Symbol.asyncIterator]() { - return this; - } - }; -} -function getIterator2(iterable) { - if (iterable[Symbol.asyncIterator]) { - return iterable[Symbol.asyncIterator](); - } - if (iterable[Symbol.iterator]) { - return iterable[Symbol.iterator](); - } - if (iterable.next) { - return iterable; - } - return fromValue2(iterable); -} -async function forAwait2(iterable, cb) { - const iter = getIterator2(iterable); - while (true) { - const { value, done } = await iter.next(); - if (value) - await cb(value); - if (done) - break; - } - if (iter.return) - iter.return(); -} -async function collect2(iterable) { - let size = 0; - const buffers = []; - await forAwait2(iterable, (value) => { - buffers.push(value); - size += value.byteLength; - }); - const result = new Uint8Array(size); - let nextIndex = 0; - for (const buffer2 of buffers) { - result.set(buffer2, nextIndex); - nextIndex += buffer2.byteLength; - } - return result; -} - -// src/setting/settings.ts -var FORMAT_STRING_REFERENCE_URL = "https://momentjs.com/docs/#/parsing/string-format/"; -var LINE_AUTHOR_FEATURE_WIKI_LINK = "https://publish.obsidian.md/git-doc/Line+Authoring"; -var ObsidianGitSettingsTab = class extends import_obsidian8.PluginSettingTab { - constructor() { - super(...arguments); - this.lineAuthorColorSettings = /* @__PURE__ */ new Map(); - } - // narrow type from PluginSettingTab.plugin - get settings() { - return this.plugin.settings; - } - display() { - const { containerEl } = this; - const plugin = this.plugin; - const commitOrBackup = plugin.settings.differentIntervalCommitAndPush ? "commit" : "backup"; - const gitReady = plugin.gitReady; - containerEl.empty(); - containerEl.createEl("h2", { text: "Git Backup settings" }); - if (!gitReady) { - containerEl.createEl("p", { - text: "Git is not ready. When all settings are correct you can configure auto backup, etc." - }); - } - if (gitReady) { - containerEl.createEl("br"); - containerEl.createEl("h3", { text: "Automatic" }); - new import_obsidian8.Setting(containerEl).setName("Split automatic commit and push").setDesc("Enable to use separate timer for commit and push").addToggle( - (toggle) => toggle.setValue( - plugin.settings.differentIntervalCommitAndPush - ).onChange((value) => { - plugin.settings.differentIntervalCommitAndPush = value; - plugin.saveSettings(); - plugin.clearAutoBackup(); - plugin.clearAutoPush(); - if (plugin.settings.autoSaveInterval > 0) { - plugin.startAutoBackup( - plugin.settings.autoSaveInterval - ); - } - if (value && plugin.settings.autoPushInterval > 0) { - plugin.startAutoPush( - plugin.settings.autoPushInterval - ); - } - this.display(); - }) - ); - new import_obsidian8.Setting(containerEl).setName(`Vault ${commitOrBackup} interval (minutes)`).setDesc( - `${plugin.settings.differentIntervalCommitAndPush ? "Commit" : "Commit and push"} changes every X minutes. Set to 0 (default) to disable. (See below setting for further configuration!)` - ).addText( - (text2) => text2.setValue(String(plugin.settings.autoSaveInterval)).onChange((value) => { - if (!isNaN(Number(value))) { - plugin.settings.autoSaveInterval = Number(value); - plugin.saveSettings(); - if (plugin.settings.autoSaveInterval > 0) { - plugin.clearAutoBackup(); - plugin.startAutoBackup( - plugin.settings.autoSaveInterval - ); - new import_obsidian8.Notice( - `Automatic ${commitOrBackup} enabled! Every ${formatMinutes( - plugin.settings.autoSaveInterval - )}.` - ); - } else if (plugin.settings.autoSaveInterval <= 0) { - plugin.clearAutoBackup() && new import_obsidian8.Notice( - `Automatic ${commitOrBackup} disabled!` - ); - } - } else { - new import_obsidian8.Notice("Please specify a valid number."); - } - }) - ); - if (!plugin.settings.setLastSaveToLastCommit) - new import_obsidian8.Setting(containerEl).setName(`Auto Backup after stopping file edits`).setDesc( - `Requires the ${commitOrBackup} interval not to be 0. - If turned on, do auto ${commitOrBackup} every ${formatMinutes( - plugin.settings.autoSaveInterval - )} after stopping file edits. - This also prevents auto ${commitOrBackup} while editing a file. If turned off, it's independent from the last change.` - ).addToggle( - (toggle) => toggle.setValue(plugin.settings.autoBackupAfterFileChange).onChange((value) => { - plugin.settings.autoBackupAfterFileChange = value; - this.display(); - plugin.saveSettings(); - plugin.clearAutoBackup(); - if (plugin.settings.autoSaveInterval > 0) { - plugin.startAutoBackup( - plugin.settings.autoSaveInterval - ); - } - }) - ); - if (!plugin.settings.autoBackupAfterFileChange) - new import_obsidian8.Setting(containerEl).setName(`Auto ${commitOrBackup} after latest commit`).setDesc( - `If turned on, set last auto ${commitOrBackup} time to latest commit` - ).addToggle( - (toggle) => toggle.setValue(plugin.settings.setLastSaveToLastCommit).onChange(async (value) => { - plugin.settings.setLastSaveToLastCommit = value; - plugin.saveSettings(); - this.display(); - plugin.clearAutoBackup(); - await plugin.setUpAutoBackup(); - }) - ); - if (plugin.settings.differentIntervalCommitAndPush) { - new import_obsidian8.Setting(containerEl).setName(`Vault push interval (minutes)`).setDesc( - "Push changes every X minutes. Set to 0 (default) to disable." - ).addText( - (text2) => text2.setValue(String(plugin.settings.autoPushInterval)).onChange((value) => { - if (!isNaN(Number(value))) { - plugin.settings.autoPushInterval = Number(value); - plugin.saveSettings(); - if (plugin.settings.autoPushInterval > 0) { - plugin.clearAutoPush(); - plugin.startAutoPush( - plugin.settings.autoPushInterval - ); - new import_obsidian8.Notice( - `Automatic push enabled! Every ${formatMinutes( - plugin.settings.autoPushInterval - )}.` - ); - } else if (plugin.settings.autoPushInterval <= 0) { - plugin.clearAutoPush() && new import_obsidian8.Notice( - "Automatic push disabled!" - ); - } - } else { - new import_obsidian8.Notice( - "Please specify a valid number." - ); - } - }) - ); - } - new import_obsidian8.Setting(containerEl).setName("Auto pull interval (minutes)").setDesc( - "Pull changes every X minutes. Set to 0 (default) to disable." - ).addText( - (text2) => text2.setValue(String(plugin.settings.autoPullInterval)).onChange((value) => { - if (!isNaN(Number(value))) { - plugin.settings.autoPullInterval = Number(value); - plugin.saveSettings(); - if (plugin.settings.autoPullInterval > 0) { - plugin.clearAutoPull(); - plugin.startAutoPull( - plugin.settings.autoPullInterval - ); - new import_obsidian8.Notice( - `Automatic pull enabled! Every ${formatMinutes( - plugin.settings.autoPullInterval - )}.` - ); - } else if (plugin.settings.autoPullInterval <= 0) { - plugin.clearAutoPull() && new import_obsidian8.Notice("Automatic pull disabled!"); - } - } else { - new import_obsidian8.Notice("Please specify a valid number."); - } - }) - ); - new import_obsidian8.Setting(containerEl).setName("Specify custom commit message on auto backup").setDesc("You will get a pop up to specify your message").addToggle( - (toggle) => toggle.setValue(plugin.settings.customMessageOnAutoBackup).onChange((value) => { - plugin.settings.customMessageOnAutoBackup = value; - plugin.saveSettings(); - }) - ); - new import_obsidian8.Setting(containerEl).setName("Commit message on auto backup/commit").setDesc( - "Available placeholders: {{date}} (see below), {{hostname}} (see below), {{numFiles}} (number of changed files in the commit) and {{files}} (changed files in commit message)" - ).addTextArea( - (text2) => text2.setPlaceholder("vault backup: {{date}}").setValue(plugin.settings.autoCommitMessage).onChange((value) => { - plugin.settings.autoCommitMessage = value; - plugin.saveSettings(); - }) - ); - containerEl.createEl("br"); - containerEl.createEl("h3", { text: "Commit message" }); - new import_obsidian8.Setting(containerEl).setName("Commit message on manual backup/commit").setDesc( - "Available placeholders: {{date}} (see below), {{hostname}} (see below), {{numFiles}} (number of changed files in the commit) and {{files}} (changed files in commit message)" - ).addTextArea( - (text2) => text2.setPlaceholder("vault backup: {{date}}").setValue( - plugin.settings.commitMessage ? plugin.settings.commitMessage : "" - ).onChange((value) => { - plugin.settings.commitMessage = value; - plugin.saveSettings(); - }) - ); - const datePlaceholderSetting = new import_obsidian8.Setting(containerEl).setName("{{date}} placeholder format").addText( - (text2) => text2.setPlaceholder(plugin.settings.commitDateFormat).setValue(plugin.settings.commitDateFormat).onChange(async (value) => { - plugin.settings.commitDateFormat = value; - await plugin.saveSettings(); - }) - ); - datePlaceholderSetting.descEl.innerHTML = ` - Specify custom date format. E.g. "${DATE_TIME_FORMAT_SECONDS}. See Moment.js for more formats.`; - new import_obsidian8.Setting(containerEl).setName("{{hostname}} placeholder replacement").setDesc("Specify custom hostname for every device.").addText( - (text2) => { - var _a2; - return text2.setValue((_a2 = plugin.localStorage.getHostname()) != null ? _a2 : "").onChange(async (value) => { - plugin.localStorage.setHostname(value); - }); - } - ); - new import_obsidian8.Setting(containerEl).setName("Preview commit message").addButton( - (button) => button.setButtonText("Preview").onClick(async () => { - const commitMessagePreview = await plugin.gitManager.formatCommitMessage( - plugin.settings.commitMessage - ); - new import_obsidian8.Notice(`${commitMessagePreview}`); - }) - ); - new import_obsidian8.Setting(containerEl).setName("List filenames affected by commit in the commit body").addToggle( - (toggle) => toggle.setValue(plugin.settings.listChangedFilesInMessageBody).onChange((value) => { - plugin.settings.listChangedFilesInMessageBody = value; - plugin.saveSettings(); - }) - ); - containerEl.createEl("br"); - containerEl.createEl("h3", { text: "Backup" }); - if (plugin.gitManager instanceof SimpleGit) - new import_obsidian8.Setting(containerEl).setName("Sync Method").setDesc( - "Selects the method used for handling new changes found in your remote git repository." - ).addDropdown((dropdown) => { - const options = { - merge: "Merge", - rebase: "Rebase", - reset: "Other sync service (Only updates the HEAD without touching the working directory)" - }; - dropdown.addOptions(options); - dropdown.setValue(plugin.settings.syncMethod); - dropdown.onChange(async (option) => { - plugin.settings.syncMethod = option; - plugin.saveSettings(); - }); - }); - new import_obsidian8.Setting(containerEl).setName("Pull updates on startup").setDesc("Automatically pull updates when Obsidian starts").addToggle( - (toggle) => toggle.setValue(plugin.settings.autoPullOnBoot).onChange((value) => { - plugin.settings.autoPullOnBoot = value; - plugin.saveSettings(); - }) - ); - new import_obsidian8.Setting(containerEl).setName("Push on backup").setDesc("Disable to only commit changes").addToggle( - (toggle) => toggle.setValue(!plugin.settings.disablePush).onChange((value) => { - plugin.settings.disablePush = !value; - plugin.saveSettings(); - }) - ); - new import_obsidian8.Setting(containerEl).setName("Pull changes before push").setDesc("Commit -> pull -> push (Only if pushing is enabled)").addToggle( - (toggle) => toggle.setValue(plugin.settings.pullBeforePush).onChange((value) => { - plugin.settings.pullBeforePush = value; - plugin.saveSettings(); - }) - ); - if (plugin.gitManager instanceof SimpleGit) { - containerEl.createEl("br"); - containerEl.createEl("h3", { text: "Line author information" }); - this.addLineAuthorInfoSettings(); - } - } - containerEl.createEl("br"); - containerEl.createEl("h3", { text: "History View" }); - new import_obsidian8.Setting(containerEl).setName("Show Author").setDesc("Show the author of the commit in the history view").addDropdown((dropdown) => { - const options = { - hide: "Hide", - full: "Full", - initials: "Initials" - }; - dropdown.addOptions(options); - dropdown.setValue(plugin.settings.authorInHistoryView); - dropdown.onChange(async (option) => { - plugin.settings.authorInHistoryView = option; - plugin.saveSettings(); - plugin.refresh(); - }); - }); - new import_obsidian8.Setting(containerEl).setName("Show Date").setDesc( - "Show the date of the commit in the history view. The {{date}} placeholder format is used to display the date." - ).addToggle( - (toggle) => toggle.setValue(plugin.settings.dateInHistoryView).onChange((value) => { - plugin.settings.dateInHistoryView = value; - plugin.saveSettings(); - plugin.refresh(); - }) - ); - containerEl.createEl("br"); - containerEl.createEl("h3", { text: "Source Control View" }); - new import_obsidian8.Setting(containerEl).setName( - "Automatically refresh Source Control View on file changes" - ).setDesc( - "On slower machines this may cause lags. If so, just disable this option" - ).addToggle( - (toggle) => toggle.setValue(plugin.settings.refreshSourceControl).onChange((value) => { - plugin.settings.refreshSourceControl = value; - plugin.saveSettings(); - }) - ); - new import_obsidian8.Setting(containerEl).setName("Source Control View refresh interval").setDesc( - "Milliseconds to wait after file change before refreshing the Source Control View" - ).addText( - (toggle) => toggle.setValue( - plugin.settings.refreshSourceControlTimer.toString() - ).setPlaceholder("7000").onChange((value) => { - plugin.settings.refreshSourceControlTimer = Math.max( - parseInt(value), - 500 - ); - plugin.saveSettings(); - plugin.setRefreshDebouncer(); - }) - ); - containerEl.createEl("br"); - containerEl.createEl("h3", { text: "Miscellaneous" }); - new import_obsidian8.Setting(containerEl).setName("Disable notifications").setDesc( - "Disable notifications for git operations to minimize distraction (refer to status bar for updates). Errors are still shown as notifications even if you enable this setting" - ).addToggle( - (toggle) => toggle.setValue(plugin.settings.disablePopups).onChange((value) => { - plugin.settings.disablePopups = value; - this.display(); - plugin.saveSettings(); - }) - ); - if (!plugin.settings.disablePopups) - new import_obsidian8.Setting(containerEl).setName("Hide notifications for no changes").setDesc( - "Don't show notifications when there are no changes to commit/push" - ).addToggle( - (toggle) => toggle.setValue(plugin.settings.disablePopupsForNoChanges).onChange((value) => { - plugin.settings.disablePopupsForNoChanges = value; - plugin.saveSettings(); - }) - ); - new import_obsidian8.Setting(containerEl).setName("Show status bar").setDesc( - "Obsidian must be restarted for the changes to take affect" - ).addToggle( - (toggle) => toggle.setValue(plugin.settings.showStatusBar).onChange((value) => { - plugin.settings.showStatusBar = value; - plugin.saveSettings(); - }) - ); - new import_obsidian8.Setting(containerEl).setName("Show stage/unstage button in file menu").addToggle( - (toggle) => toggle.setValue(plugin.settings.showFileMenu).onChange((value) => { - plugin.settings.showFileMenu = value; - plugin.saveSettings(); - }) - ); - new import_obsidian8.Setting(containerEl).setName("Show branch status bar").setDesc( - "Obsidian must be restarted for the changes to take affect" - ).addToggle( - (toggle) => toggle.setValue(plugin.settings.showBranchStatusBar).onChange((value) => { - plugin.settings.showBranchStatusBar = value; - plugin.saveSettings(); - }) - ); - new import_obsidian8.Setting(containerEl).setName("Show the count of modified files in the status bar").addToggle( - (toggle) => toggle.setValue(plugin.settings.changedFilesInStatusBar).onChange((value) => { - plugin.settings.changedFilesInStatusBar = value; - plugin.saveSettings(); - }) - ); - containerEl.createEl("br"); - if (plugin.gitManager instanceof IsomorphicGit) { - containerEl.createEl("h3", { - text: "Authentication/Commit Author" - }); - } else { - containerEl.createEl("h3", { text: "Commit Author" }); - } - if (plugin.gitManager instanceof IsomorphicGit) - new import_obsidian8.Setting(containerEl).setName( - "Username on your git server. E.g. your username on GitHub" - ).addText((cb) => { - var _a2; - cb.setValue((_a2 = plugin.localStorage.getUsername()) != null ? _a2 : ""); - cb.onChange((value) => { - plugin.localStorage.setUsername(value); - }); - }); - if (plugin.gitManager instanceof IsomorphicGit) - new import_obsidian8.Setting(containerEl).setName("Password/Personal access token").setDesc( - "Type in your password. You won't be able to see it again." - ).addText((cb) => { - cb.inputEl.autocapitalize = "off"; - cb.inputEl.autocomplete = "off"; - cb.inputEl.spellcheck = false; - cb.onChange((value) => { - plugin.localStorage.setPassword(value); - }); - }); - if (plugin.gitReady) - new import_obsidian8.Setting(containerEl).setName("Author name for commit").addText(async (cb) => { - cb.setValue(await plugin.gitManager.getConfig("user.name")); - cb.onChange((value) => { - plugin.gitManager.setConfig( - "user.name", - value == "" ? void 0 : value - ); - }); - }); - if (plugin.gitReady) - new import_obsidian8.Setting(containerEl).setName("Author email for commit").addText(async (cb) => { - cb.setValue( - await plugin.gitManager.getConfig("user.email") - ); - cb.onChange((value) => { - plugin.gitManager.setConfig( - "user.email", - value == "" ? void 0 : value - ); - }); - }); - containerEl.createEl("br"); - containerEl.createEl("h3", { text: "Advanced" }); - if (plugin.gitManager instanceof SimpleGit) { - new import_obsidian8.Setting(containerEl).setName("Update submodules").setDesc( - '"Create backup" and "pull" takes care of submodules. Missing features: Conflicted files, count of pulled/pushed/committed files. Tracking branch needs to be set for each submodule' - ).addToggle( - (toggle) => toggle.setValue(plugin.settings.updateSubmodules).onChange((value) => { - plugin.settings.updateSubmodules = value; - plugin.saveSettings(); - }) - ); - if (plugin.settings.updateSubmodules) { - new import_obsidian8.Setting(containerEl).setName("Submodule recurse checkout/switch").setDesc( - "Whenever a checkout happens on the root repository, recurse the checkout on the submodules (if the branches exist)." - ).addToggle( - (toggle) => toggle.setValue(plugin.settings.submoduleRecurseCheckout).onChange((value) => { - plugin.settings.submoduleRecurseCheckout = value; - plugin.saveSettings(); - }) - ); - } - } - if (plugin.gitManager instanceof SimpleGit) - new import_obsidian8.Setting(containerEl).setName("Custom Git binary path").addText((cb) => { - var _a2; - cb.setValue((_a2 = plugin.localStorage.getGitPath()) != null ? _a2 : ""); - cb.setPlaceholder("git"); - cb.onChange((value) => { - plugin.localStorage.setGitPath(value); - plugin.gitManager.updateGitPath(value || "git"); - }); - }); - if (plugin.gitManager instanceof SimpleGit) - new import_obsidian8.Setting(containerEl).setName("Additional environment variables").setDesc( - "Use each line for a new environment variable in the format KEY=VALUE" - ).addTextArea((cb) => { - cb.setPlaceholder("GIT_DIR=/path/to/git/dir"); - cb.setValue(plugin.localStorage.getEnvVars().join("\n")); - cb.onChange((value) => { - plugin.localStorage.setEnvVars(value.split("\n")); - }); - }); - if (plugin.gitManager instanceof SimpleGit) - new import_obsidian8.Setting(containerEl).setName("Additional PATH environment variable paths").setDesc("Use each line for one path").addTextArea((cb) => { - cb.setValue(plugin.localStorage.getPATHPaths().join("\n")); - cb.onChange((value) => { - plugin.localStorage.setPATHPaths(value.split("\n")); - }); - }); - if (plugin.gitManager instanceof SimpleGit) - new import_obsidian8.Setting(containerEl).setName("Reload with new environment variables").setDesc( - "Removing previously added environment variables will not take effect until Obsidian is restarted." - ).addButton((cb) => { - cb.setButtonText("Reload"); - cb.setCta(); - cb.onClick(() => { - plugin.gitManager.setGitInstance(); - }); - }); - new import_obsidian8.Setting(containerEl).setName("Custom base path (Git repository path)").setDesc( - ` - Sets the relative path to the vault from which the Git binary should be executed. - Mostly used to set the path to the Git repository, which is only required if the Git repository is below the vault root directory. Use "\\" instead of "/" on Windows. - ` - ).addText((cb) => { - cb.setValue(plugin.settings.basePath); - cb.setPlaceholder("directory/directory-with-git-repo"); - cb.onChange((value) => { - plugin.settings.basePath = value; - plugin.saveSettings(); - plugin.gitManager.updateBasePath(value || ""); - }); - }); - new import_obsidian8.Setting(containerEl).setName("Custom Git directory path (Instead of '.git')").setDesc( - `Requires restart of Obsidian to take effect. Use "\\" instead of "/" on Windows.` - ).addText((cb) => { - cb.setValue(plugin.settings.gitDir); - cb.setPlaceholder(".git"); - cb.onChange((value) => { - plugin.settings.gitDir = value; - plugin.saveSettings(); - }); - }); - new import_obsidian8.Setting(containerEl).setName("Disable on this device").setDesc( - "Disables the plugin on this device. This setting is not synced." - ).addToggle( - (toggle) => toggle.setValue(plugin.localStorage.getPluginDisabled()).onChange((value) => { - plugin.localStorage.setPluginDisabled(value); - if (value) { - plugin.unloadPlugin(); - } else { - plugin.loadPlugin(); - } - new import_obsidian8.Notice( - "Obsidian must be restarted for the changes to take affect" - ); - }) - ); - new import_obsidian8.Setting(containerEl).setName("Donate").setDesc( - "If you like this Plugin, consider donating to support continued development." - ).addButton((bt) => { - bt.buttonEl.outerHTML = "Buy Me a Coffee at ko-fi.com"; - }); - const info = containerEl.createDiv(); - info.setAttr("align", "center"); - info.setText( - "Debugging and logging:\nYou can always see the logs of this and every other plugin by opening the console with" - ); - const keys = containerEl.createDiv(); - keys.setAttr("align", "center"); - keys.addClass("obsidian-git-shortcuts"); - if (import_obsidian8.Platform.isMacOS === true) { - keys.createEl("kbd", { text: "CMD (\u2318) + OPTION (\u2325) + I" }); - } else { - keys.createEl("kbd", { text: "CTRL + SHIFT + I" }); - } - } - configureLineAuthorShowStatus(show) { - this.settings.lineAuthor.show = show; - this.plugin.saveSettings(); - if (show) - this.plugin.lineAuthoringFeature.activateFeature(); - else - this.plugin.lineAuthoringFeature.deactivateFeature(); - } - /** - * Persists the setting {@link key} with value {@link value} and - * refreshes the line author info views. - */ - lineAuthorSettingHandler(key2, value) { - this.settings.lineAuthor[key2] = value; - this.plugin.saveSettings(); - this.plugin.lineAuthoringFeature.refreshLineAuthorViews(); - } - /** - * Ensure, that certain last shown values are persisten in the settings. - * - * Necessary for the line author info gutter context menus. - */ - beforeSaveSettings() { - const laSettings = this.settings.lineAuthor; - if (laSettings.authorDisplay !== "hide") { - laSettings.lastShownAuthorDisplay = laSettings.authorDisplay; - } - if (laSettings.dateTimeFormatOptions !== "hide") { - laSettings.lastShownDateTimeFormatOptions = laSettings.dateTimeFormatOptions; - } - } - addLineAuthorInfoSettings() { - const baseLineAuthorInfoSetting = new import_obsidian8.Setting(this.containerEl).setName( - "Show commit authoring information next to each line" - ); - if (!this.plugin.lineAuthoringFeature.isAvailableOnCurrentPlatform()) { - baseLineAuthorInfoSetting.setDesc("Only available on desktop currently.").setDisabled(true); - } - baseLineAuthorInfoSetting.descEl.innerHTML = ` - Feature guide and quick examples
- The commit hash, author name and authoring date can all be individually toggled.
Hide everything, to only show the age-colored sidebar.`; - baseLineAuthorInfoSetting.addToggle( - (toggle) => toggle.setValue(this.settings.lineAuthor.show).onChange((value) => { - this.configureLineAuthorShowStatus(value); - this.display(); - }) - ); - if (this.settings.lineAuthor.show) { - const trackMovement = new import_obsidian8.Setting(this.containerEl).setName("Follow movement and copies across files and commits").setDesc("").addDropdown((dropdown) => { - dropdown.addOptions({ - inactive: "Do not follow (default)", - "same-commit": "Follow within same commit", - "all-commits": "Follow within all commits (maybe slow)" - }); - dropdown.setValue(this.settings.lineAuthor.followMovement); - dropdown.onChange( - (value) => this.lineAuthorSettingHandler("followMovement", value) - ); - }); - trackMovement.descEl.innerHTML = ` - By default (deactivated), each line only shows the newest commit where it was changed. -
- With same commit, cut-copy-paste-ing of text is followed within the same commit and the original commit of authoring will be shown. -
- With all commits, cut-copy-paste-ing text inbetween multiple commits will be detected. -
- It uses git-blame and - for matches (at least ${GIT_LINE_AUTHORING_MOVEMENT_DETECTION_MINIMAL_LENGTH} characters) within the same (or all) commit(s), the originating commit's information is shown.`; - new import_obsidian8.Setting(this.containerEl).setName("Show commit hash").addToggle((tgl) => { - tgl.setValue(this.settings.lineAuthor.showCommitHash); - tgl.onChange( - async (value) => this.lineAuthorSettingHandler("showCommitHash", value) - ); - }); - new import_obsidian8.Setting(this.containerEl).setName("Author name display").setDesc("If and how the author is displayed").addDropdown((dropdown) => { - const options = { - hide: "Hide", - initials: "Initials (default)", - "first name": "First name", - "last name": "Last name", - full: "Full name" - }; - dropdown.addOptions(options); - dropdown.setValue(this.settings.lineAuthor.authorDisplay); - dropdown.onChange( - async (value) => this.lineAuthorSettingHandler("authorDisplay", value) - ); - }); - new import_obsidian8.Setting(this.containerEl).setName("Authoring date display").setDesc( - "If and how the date and time of authoring the line is displayed" - ).addDropdown((dropdown) => { - const options = { - hide: "Hide", - date: "Date (default)", - datetime: "Date and time", - "natural language": "Natural language", - custom: "Custom" - }; - dropdown.addOptions(options); - dropdown.setValue( - this.settings.lineAuthor.dateTimeFormatOptions - ); - dropdown.onChange( - async (value) => { - this.lineAuthorSettingHandler( - "dateTimeFormatOptions", - value - ); - this.display(); - } - ); - }); - if (this.settings.lineAuthor.dateTimeFormatOptions === "custom") { - const dateTimeFormatCustomStringSetting = new import_obsidian8.Setting( - this.containerEl - ); - dateTimeFormatCustomStringSetting.setName("Custom authoring date format").addText((cb) => { - cb.setValue( - this.settings.lineAuthor.dateTimeFormatCustomString - ); - cb.setPlaceholder("YYYY-MM-DD HH:mm"); - cb.onChange((value) => { - this.lineAuthorSettingHandler( - "dateTimeFormatCustomString", - value - ); - dateTimeFormatCustomStringSetting.descEl.innerHTML = this.previewCustomDateTimeDescriptionHtml( - value - ); - }); - }); - dateTimeFormatCustomStringSetting.descEl.innerHTML = this.previewCustomDateTimeDescriptionHtml( - this.settings.lineAuthor.dateTimeFormatCustomString - ); - } - new import_obsidian8.Setting(this.containerEl).setName("Authoring date display timezone").addDropdown((dropdown) => { - const options = { - "viewer-local": "My local (default)", - "author-local": "Author's local", - utc0000: "UTC+0000/Z" - }; - dropdown.addOptions(options); - dropdown.setValue( - this.settings.lineAuthor.dateTimeTimezone - ); - dropdown.onChange( - async (value) => this.lineAuthorSettingHandler("dateTimeTimezone", value) - ); - }).descEl.innerHTML = ` - The time-zone in which the authoring date should be shown. - Either your local time-zone (default), - the author's time-zone during commit creation or - UTC\xB100:00. - `; - const oldestAgeSetting = new import_obsidian8.Setting(this.containerEl).setName( - "Oldest age in coloring" - ); - oldestAgeSetting.descEl.innerHTML = this.previewOldestAgeDescriptionHtml( - this.settings.lineAuthor.coloringMaxAge - )[0]; - oldestAgeSetting.addText((text2) => { - text2.setPlaceholder("1y"); - text2.setValue(this.settings.lineAuthor.coloringMaxAge); - text2.onChange((value) => { - const [preview, valid] = this.previewOldestAgeDescriptionHtml(value); - oldestAgeSetting.descEl.innerHTML = preview; - if (valid) { - this.lineAuthorSettingHandler("coloringMaxAge", value); - this.refreshColorSettingsName("oldest"); - } - }); - }); - this.createColorSetting("newest"); - this.createColorSetting("oldest"); - new import_obsidian8.Setting(this.containerEl).setName("Text color").addText((field) => { - field.setValue(this.settings.lineAuthor.textColorCss); - field.onChange((value) => { - this.lineAuthorSettingHandler("textColorCss", value); - }); - }).descEl.innerHTML = ` - The CSS color of the gutter text.
- - It is higly recommended to use - - CSS variables - defined by themes - (e.g.

var(--text-muted)
or -
var(--text-on-accent)
, - because they automatically adapt to theme changes.
- - See: - List of available CSS variables in Obsidian - - `; - new import_obsidian8.Setting(this.containerEl).setName("Ignore whitespace and newlines in changes").addToggle((tgl) => { - tgl.setValue(this.settings.lineAuthor.ignoreWhitespace); - tgl.onChange( - (value) => this.lineAuthorSettingHandler("ignoreWhitespace", value) - ); - }).descEl.innerHTML = ` - Whitespace and newlines are interpreted as - part of the document and in changes - by default (hence not ignored). - This makes the last line being shown as 'changed' - when a new subsequent line is added, - even if the previously last line's text is the same. -
- If you don't care about purely-whitespace changes - (e.g. list nesting / quote indentation changes), - then activating this will provide more meaningful change detection. - `; - } - } - createColorSetting(which) { - const setting = new import_obsidian8.Setting(this.containerEl).setName("").addText((text2) => { - const color = pickColor(which, this.settings.lineAuthor); - const defaultColor = pickColor( - which, - DEFAULT_SETTINGS.lineAuthor - ); - text2.setPlaceholder(rgbToString(defaultColor)); - text2.setValue(rgbToString(color)); - text2.onChange((colorNew) => { - const rgb = convertToRgb(colorNew); - if (rgb !== void 0) { - const key2 = which === "newest" ? "colorNew" : "colorOld"; - this.lineAuthorSettingHandler(key2, rgb); - } - this.refreshColorSettingsDesc(which, rgb); - }); - }); - this.lineAuthorColorSettings.set(which, setting); - this.refreshColorSettingsName(which); - this.refreshColorSettingsDesc( - which, - pickColor(which, this.settings.lineAuthor) - ); - } - refreshColorSettingsName(which) { - const settingsDom = this.lineAuthorColorSettings.get(which); - if (settingsDom) { - const whichDescriber = which === "oldest" ? `oldest (${this.settings.lineAuthor.coloringMaxAge} or older)` : "newest"; - settingsDom.nameEl.innerText = `Color for ${whichDescriber} commits`; - } - } - refreshColorSettingsDesc(which, rgb) { - const settingsDom = this.lineAuthorColorSettings.get(which); - if (settingsDom) { - settingsDom.descEl.innerHTML = this.colorSettingPreviewDescHtml( - which, - this.settings.lineAuthor, - rgb !== void 0 - ); - } - } - colorSettingPreviewDescHtml(which, laSettings, colorIsValid) { - const rgbStr = colorIsValid ? previewColor(which, laSettings) : `rgba(127,127,127,0.3)`; - const today = import_obsidian8.moment.unix(import_obsidian8.moment.now() / 1e3).format("YYYY-MM-DD"); - const text2 = colorIsValid ? `abcdef Author Name ${today}` : "invalid color"; - const preview = `
${text2}
`; - return `Supports 'rgb(r,g,b)', 'hsl(h,s,l)', hex (#) and - named colors (e.g. 'black', 'purple'). Color preview: ${preview}`; - } - previewCustomDateTimeDescriptionHtml(dateTimeFormatCustomString) { - const formattedDateTime = (0, import_obsidian8.moment)().format(dateTimeFormatCustomString); - return `
Format string to display the authoring date.
Currently: ${formattedDateTime}`; - } - previewOldestAgeDescriptionHtml(coloringMaxAge) { - const duration = parseColoringMaxAgeDuration(coloringMaxAge); - const durationString = duration !== void 0 ? `${duration.asDays()} days` : "invalid!"; - return [ - `The oldest age in the line author coloring. Everything older will have the same color. -
Smallest valid age is "1d". Currently: ${durationString}`, - duration - ]; - } -}; -function pickColor(which, las) { - return which === "oldest" ? las.colorOld : las.colorNew; -} -function parseColoringMaxAgeDuration(durationString) { - const duration = import_obsidian8.moment.duration("P" + durationString.toUpperCase()); - return duration.isValid() && duration.asDays() && duration.asDays() >= 1 ? duration : void 0; -} - -// src/lineAuthor/model.ts -function lineAuthoringId(head, objHash, path2) { - if (head === void 0 || objHash === void 0 || path2 === void 0) { - return void 0; - } - return `head${head}-obj${objHash}-path${path2}`; -} -var LineAuthoringContainerType = import_state.Annotation.define(); -function newComputationResultAsTransaction(key2, la, state) { - return state.update({ - annotations: LineAuthoringContainerType.of({ - key: key2, - la, - lineOffsetsFromUnsavedChanges: /* @__PURE__ */ new Map() - }) - }); -} -function getLineAuthorAnnotation(tr) { - return tr.annotation(LineAuthoringContainerType); -} -var lineAuthorState = import_state.StateField.define({ - create: (_state) => void 0, - /** - * The state can be updated from either an annotated transaction containing - * the newest line authoring (for the saved document) - or from - * unsaved changes of the document as the user is actively typing in the editor. - * - * In the first case, we take the new line authoring and discard anything we had remembered - * from unsaved changes. In the second case, we use the unsaved changes in {@link enrichUnsavedChanges} to pre-compute information to immediately update the - * line author gutter without needing to wait until the document is saved and the - * line authoring is properly computed. - */ - update: (previous, transaction) => { - var _a2; - return (_a2 = getLineAuthorAnnotation(transaction)) != null ? _a2 : enrichUnsavedChanges(transaction, previous); - }, - // compare cache keys. - // equality rate is >= 95% :) - // hence avoids recomputation of views - compare: (l, r) => (l == null ? void 0 : l.key) === (r == null ? void 0 : r.key) -}); -function laStateDigest(laState) { - var _a2; - const digest = import_js_sha256.sha256.create(); - if (!laState) - return digest; - const { la, key: key2, lineOffsetsFromUnsavedChanges } = laState; - digest.update(la === "untracked" ? "t" : "f"); - digest.update(key2); - for (const [k, v] of (_a2 = lineOffsetsFromUnsavedChanges.entries()) != null ? _a2 : []) - digest.update([k, v]); - return digest; -} -var latestSettings = { - get: void 0, - save: void 0 -}; -function provideSettingsAccess(settingsGetter, settingsSetter) { - latestSettings.get = settingsGetter; - latestSettings.save = settingsSetter; -} -function maxAgeInDaysFromSettings(settings) { - var _a2, _b; - return (_b = (_a2 = parseColoringMaxAgeDuration(settings.coloringMaxAge)) == null ? void 0 : _a2.asDays()) != null ? _b : parseColoringMaxAgeDuration( - DEFAULT_SETTINGS.lineAuthor.coloringMaxAge - ).asDays(); -} -function enrichUnsavedChanges(tr, prev) { - if (!prev) - return void 0; - if (!tr.changes.empty) { - tr.changes.iterChanges((fromA, toA, fromB, toB) => { - var _a2; - const oldDoc = tr.startState.doc; - const { newDoc } = tr; - const beforeFrom = oldDoc.lineAt(fromA).number; - const beforeTo = oldDoc.lineAt(toA).number; - const afterFrom = newDoc.lineAt(fromB).number; - const afterTo = newDoc.lineAt(toB).number; - const beforeLen = beforeTo - beforeFrom + 1; - const afterLen = afterTo - afterFrom + 1; - for (let afterI = afterFrom; afterI <= afterTo; afterI++) { - let offset = (_a2 = prev.lineOffsetsFromUnsavedChanges.get(afterI)) != null ? _a2 : 0; - const isLastLine = afterTo === afterI; - const changeInNumberOfLines = afterLen - beforeLen; - if (isLastLine) - offset += changeInNumberOfLines; - prev.lineOffsetsFromUnsavedChanges.set(afterI, offset); - } - }); - } - return prev; -} - -// src/lineAuthor/control.ts -var LineAuthoringSubscriber = class { - // remember path to detect and adapt to renames - constructor(state) { - this.state = state; - this.subscribeMe(); - } - async notifyLineAuthoring(id, la) { - if (this.view === void 0) { - console.warn( - `Git: View is not defined for editor cache key. Unforeseen situation. id: ${id}` - ); - return; - } - const state = this.view.state; - const transaction = newComputationResultAsTransaction(id, la, state); - this.view.dispatch(transaction); - } - updateToNewState(state) { - const filepathChanged = this.lastSeenPath && this.filepath != this.lastSeenPath; - this.state = state; - if (filepathChanged) { - this.unsubscribeMe(this.lastSeenPath); - this.subscribeMe(); - } - return this; - } - removeIfStale() { - if (this.view.destroyed) { - this.unsubscribeMe(this.lastSeenPath); - } - } - subscribeMe() { - if (this.filepath === void 0) - return; - eventsPerFilePathSingleton.ifFilepathDefinedTransformSubscribers( - this.filepath, - (subs) => subs.add(this) - ); - this.lastSeenPath = this.filepath; - } - unsubscribeMe(oldFilepath) { - eventsPerFilePathSingleton.ifFilepathDefinedTransformSubscribers( - oldFilepath, - (subs) => subs.delete(this) - ); - } - get filepath() { - var _a2, _b; - return (_b = (_a2 = this.state.field(import_obsidian9.editorViewField)) == null ? void 0 : _a2.file) == null ? void 0 : _b.path; - } - get view() { - return this.state.field(import_obsidian9.editorEditorField); - } -}; -var subscribeNewEditor = import_state2.StateField.define({ - create: (state) => new LineAuthoringSubscriber(state), - update: (v, transaction) => v.updateToNewState(transaction.state), - compare: (a, b) => a === b -}); - -// src/lineAuthor/view/cache.ts -init_polyfill_buffer(); -function clearViewCache() { - longestRenderedGutter = void 0; - renderedAgeInDaysForAdaptiveInitialColoring = []; - ageIdx = 0; - gutterInstances.clear(); - gutterMarkersRangeSet.clear(); - attachedGutterElements.clear(); -} -var longestRenderedGutter = void 0; -var getLongestRenderedGutter = () => longestRenderedGutter; -function conditionallyUpdateLongestRenderedGutter(gutter2, text2) { - var _a2; - const length = text2.length; - if (length < ((_a2 = longestRenderedGutter == null ? void 0 : longestRenderedGutter.length) != null ? _a2 : 0)) - return; - longestRenderedGutter = { gutter: gutter2, length, text: text2 }; - const settings = latestSettings.get(); - if (length !== settings.gutterSpacingFallbackLength) { - settings.gutterSpacingFallbackLength = length; - latestSettings.save(settings); - } -} -var renderedAgeInDaysForAdaptiveInitialColoring = []; -var ADAPTIVE_INITIAL_COLORING_AGE_CACHE_SIZE = 15; -var ageIdx = 0; -function recordRenderedAgeInDays(age) { - renderedAgeInDaysForAdaptiveInitialColoring[ageIdx] = age; - ageIdx = (ageIdx + 1) % ADAPTIVE_INITIAL_COLORING_AGE_CACHE_SIZE; -} -function computeAdaptiveInitialColoringAgeInDays() { - return median(renderedAgeInDaysForAdaptiveInitialColoring); -} -var gutterInstances = /* @__PURE__ */ new Map(); -var gutterMarkersRangeSet = /* @__PURE__ */ new Map(); -var attachedGutterElements = /* @__PURE__ */ new Set(); - -// src/lineAuthor/view/view.ts -init_polyfill_buffer(); -var import_state3 = require("@codemirror/state"); -var import_view2 = require("@codemirror/view"); - -// src/lineAuthor/view/gutter/gutter.ts -init_polyfill_buffer(); -var import_view = require("@codemirror/view"); -var import_js_sha2562 = __toESM(require_sha256()); -var import_obsidian10 = require("obsidian"); - -// src/lineAuthor/view/contextMenu.ts -init_polyfill_buffer(); - -// src/lineAuthor/view/gutter/gutterElementSearch.ts -init_polyfill_buffer(); -var mouseXY = { x: -10, y: -10 }; -function prepareGutterSearchForContextMenuHandling() { - if (mouseXY.x === -10) { - window.addEventListener("mousedown", (e) => { - mouseXY.x = e.clientX; - mouseXY.y = e.clientY; - }); - } -} -function findGutterElementUnderMouse() { - for (const elt of attachedGutterElements) { - if (contains(elt, mouseXY)) - return elt; - } -} -function contains(elt, pt) { - const { x, y, width, height } = elt.getBoundingClientRect(); - return x <= pt.x && pt.x <= x + width && y <= pt.y && pt.y <= y + height; -} - -// src/pluginGlobalRef.ts -init_polyfill_buffer(); -var pluginRef = {}; - -// src/lineAuthor/view/contextMenu.ts -var COMMIT_ATTR = "data-commit"; -function handleContextMenu(menu, editor, _mdv) { - if (editor.hasFocus()) - return; - const gutterElement = findGutterElementUnderMouse(); - if (!gutterElement) - return; - const info = getCommitInfo(gutterElement); - if (!info) - return; - if (!info.isZeroCommit && !info.isWaitingGutter) { - addCopyHashMenuItem(info, menu); - } - addConfigurableLineAuthorSettings("showCommitHash", menu); - addConfigurableLineAuthorSettings("authorDisplay", menu); - addConfigurableLineAuthorSettings("dateTimeFormatOptions", menu); -} -function addCopyHashMenuItem(commit2, menu) { - menu.addItem( - (item) => item.setTitle("Copy commit hash").setIcon("copy").setSection("obs-git-line-author-copy").onClick((_e) => navigator.clipboard.writeText(commit2.hash)) - ); -} -function addConfigurableLineAuthorSettings(key2, menu) { - var _a2, _b; - let title; - let actionNewValue; - const settings = pluginRef.plugin.settings.lineAuthor; - const currentValue = settings[key2]; - const currentlyShown = typeof currentValue === "boolean" ? currentValue : currentValue !== "hide"; - const defaultValue = DEFAULT_SETTINGS.lineAuthor[key2]; - if (key2 === "showCommitHash") { - title = "Show commit hash"; - actionNewValue = !currentValue; - } else if (key2 === "authorDisplay") { - const showOption = (_a2 = settings.lastShownAuthorDisplay) != null ? _a2 : defaultValue; - title = "Show author " + (currentlyShown ? currentValue : showOption); - actionNewValue = currentlyShown ? "hide" : showOption; - } else if (key2 === "dateTimeFormatOptions") { - const showOption = (_b = settings.lastShownDateTimeFormatOptions) != null ? _b : defaultValue; - title = "Show " + (currentlyShown ? currentValue : showOption); - title += !title.contains("date") ? " date" : ""; - actionNewValue = currentlyShown ? "hide" : showOption; - } else { - impossibleBranch(key2); - } - menu.addItem( - (item) => item.setTitle(title).setSection("obs-git-line-author-configure").setChecked(currentlyShown).onClick( - (_e) => { - var _a3, _b2; - return (_b2 = (_a3 = pluginRef.plugin) == null ? void 0 : _a3.settingsTab) == null ? void 0 : _b2.lineAuthorSettingHandler( - key2, - actionNewValue - ); - } - ) - ); -} -function enrichCommitInfoForContextMenu(commit2, isWaitingGutter, elt) { - elt.setAttr( - COMMIT_ATTR, - JSON.stringify({ - hash: commit2.hash, - isZeroCommit: commit2.isZeroCommit, - isWaitingGutter - }) - ); -} -function getCommitInfo(elt) { - const commitInfoStr = elt.getAttr(COMMIT_ATTR); - return commitInfoStr ? JSON.parse(commitInfoStr) : void 0; -} - -// src/lineAuthor/view/gutter/coloring.ts -init_polyfill_buffer(); -function previewColor(which, settings) { - return which === "oldest" ? coloringBasedOnCommitAge(0, false, settings).color : coloringBasedOnCommitAge(void 0, true, settings).color; -} -function coloringBasedOnCommitAge(commitAuthorEpochSeonds, isZeroCommit, settings) { - const maxAgeInDays = maxAgeInDaysFromSettings(settings); - const epochSecondsNow = Date.now() / 1e3; - const authoringEpochSeconds = commitAuthorEpochSeonds != null ? commitAuthorEpochSeonds : 0; - const secondsSinceCommit = isZeroCommit ? 0 : epochSecondsNow - authoringEpochSeconds; - const daysSinceCommit = secondsSinceCommit / 60 / 60 / 24; - const x = Math.pow( - Math.clamp(daysSinceCommit / maxAgeInDays, 0, 1), - 1 / 2.3 - ); - const dark = isDarkMode(); - const color0 = settings.colorNew; - const color1 = settings.colorOld; - const scaling = dark ? 0.4 : 1; - const r = lin(color0.r, color1.r, x) * scaling; - const g = lin(color0.g, color1.g, x) * scaling; - const b = lin(color0.b, color1.b, x) * scaling; - const a = dark ? 0.75 : 0.25; - return { color: `rgba(${r},${g},${b},${a})`, daysSinceCommit }; -} -function lin(z0, z1, x) { - return z0 + (z1 - z0) * x; -} -function isDarkMode() { - const obsidian = window == null ? void 0 : window.app; - return (obsidian == null ? void 0 : obsidian.getTheme()) === "obsidian"; -} -function setTextColorCssBasedOnSetting(settings) { - document.body.style.setProperty( - "--obs-git-gutter-text", - settings.textColorCss - ); -} - -// src/lineAuthor/view/gutter/commitChoice.ts -init_polyfill_buffer(); -function chooseNewestCommit(lineAuthoring, startLine, endLine) { - let newest = void 0; - for (let line = startLine; line <= endLine; line++) { - const currentHash = lineAuthoring.hashPerLine[line]; - const currentCommit = lineAuthoring.commits.get(currentHash); - if (!newest || currentCommit.isZeroCommit || isNewerThan(currentCommit, newest)) { - newest = currentCommit; - } - } - return newest; -} -function isNewerThan(left, right) { - var _a2, _b, _c, _d; - const l = (_b = (_a2 = left.author) == null ? void 0 : _a2.epochSeconds) != null ? _b : 0; - const r = (_d = (_c = right.author) == null ? void 0 : _c.epochSeconds) != null ? _d : 0; - return l > r; -} - -// src/lineAuthor/view/gutter/gutter.ts -var VALUE_NOT_FOUND_FALLBACK = "-"; -var NEW_CHANGE_CHARACTER = "+"; -var NEW_CHANGE_NUMBER_OF_CHARACTERS = 3; -var DIFFERING_AUTHOR_COMMITTER_MARKER = "*"; -var NON_WHITESPACE_REGEXP = /\S/g; -var UNINTRUSIVE_CHARACTER_FOR_WAITING_RENDERING = "%"; -var TextGutter = class extends import_view.GutterMarker { - constructor(text2) { - super(); - this.text = text2; - } - eq(other) { - return this.text === (other == null ? void 0 : other.text); - } - toDOM() { - return document.createTextNode(this.text); - } - destroy(dom) { - if (!document.body.contains(dom)) - dom.remove(); - } -}; -var LineAuthoringGutter = class extends import_view.GutterMarker { - /** - * **This should only be called {@link lineAuthoringGutterMarker}!** - * - * We want to avoid creating the same instance multiple times for improved performance. - */ - constructor(lineAuthoring, startLine, endLine, key2, settings, options) { - super(); - this.lineAuthoring = lineAuthoring; - this.startLine = startLine; - this.endLine = endLine; - this.key = key2; - this.settings = settings; - this.options = options; - this.point = false; - this.elementClass = "obs-git-blame-gutter"; - } - // Equality used by CodeMirror for optimisations - eq(other) { - return this.key === (other == null ? void 0 : other.key) && this.startLine === (other == null ? void 0 : other.startLine) && this.endLine === (other == null ? void 0 : other.endLine) && (this == null ? void 0 : this.options) === (other == null ? void 0 : other.options); - } - /** - * Renders to a Html node. - * - * It choses the newest commit within the line-range, - * renders it, makes adjustments for fake-commits and finally warps - * it into HTML. - * - * The DOM is actually precomputed with {@link computeDom}, - * which provides a finaliser to run before the DOM is handed over to CodeMirror. - * This is done, because this method is called frequently. It is called, - * whenever a gutter gets into the viewport and needs to be rendered. - * - * The age in days is recorded via {@link recordRenderedAgeInDays} to enable adaptive coloring. - */ - toDOM() { - var _a2; - this.precomputedDomProvider = (_a2 = this.precomputedDomProvider) != null ? _a2 : this.computeDom(); - return this.precomputedDomProvider(); - } - destroy(dom) { - if (!document.body.contains(dom)) { - dom.remove(); - attachedGutterElements.delete(dom); - } - } - /** - * Prepares the DOM for this gutter. - */ - computeDom() { - const commit2 = chooseNewestCommit( - this.lineAuthoring, - this.startLine, - this.endLine - ); - let toBeRenderedText = commit2.isZeroCommit ? "" : this.renderNonZeroCommit(commit2); - const isTrueCommit = !commit2.isZeroCommit && this.options !== "waiting-for-result"; - if (isTrueCommit) { - conditionallyUpdateLongestRenderedGutter(this, toBeRenderedText); - } else { - toBeRenderedText = this.adaptTextForFakeCommit( - commit2, - toBeRenderedText, - this.options - ); - } - const domProvider = this.createHtmlNode( - commit2, - toBeRenderedText, - this.options === "waiting-for-result" - ); - return domProvider; - } - createHtmlNode(commit2, text2, isWaitingGutter) { - var _a2; - const templateElt = window.createDiv(); - templateElt.innerText = text2; - const { color, daysSinceCommit } = coloringBasedOnCommitAge( - (_a2 = commit2 == null ? void 0 : commit2.author) == null ? void 0 : _a2.epochSeconds, - commit2 == null ? void 0 : commit2.isZeroCommit, - this.settings - ); - templateElt.style.backgroundColor = color; - enrichCommitInfoForContextMenu(commit2, isWaitingGutter, templateElt); - function prepareForDomAttachment() { - const elt = templateElt.cloneNode(true); - attachedGutterElements.add(elt); - if (!isWaitingGutter) - recordRenderedAgeInDays(daysSinceCommit); - return elt; - } - return prepareForDomAttachment; - } - renderNonZeroCommit(commit2) { - const optionalShortHash = this.settings.showCommitHash ? this.renderHash(commit2) : ""; - const optionalAuthorName = this.settings.authorDisplay === "hide" ? "" : `${this.renderAuthorName( - commit2, - this.settings.authorDisplay - )}`; - const optionalAuthoringDate = this.settings.dateTimeFormatOptions === "hide" ? "" : `${this.renderAuthoringDate( - commit2, - this.settings.dateTimeFormatOptions, - this.settings.dateTimeFormatCustomString, - this.settings.dateTimeTimezone - )}`; - const parts = [ - optionalShortHash, - optionalAuthorName, - optionalAuthoringDate - ]; - return parts.filter((x) => x.length >= 1).join(" "); - } - renderHash(nonZeroCommit) { - return nonZeroCommit.hash.substring(0, 6); - } - renderAuthorName(nonZeroCommit, authorDisplay) { - var _a2, _b, _c, _d; - const name = (_b = (_a2 = nonZeroCommit == null ? void 0 : nonZeroCommit.author) == null ? void 0 : _a2.name) != null ? _b : ""; - const words = name.split(" ").filter((word) => word.length >= 1); - let rendered; - switch (authorDisplay) { - case "initials": - rendered = words.map((word) => word[0].toUpperCase()).join(""); - break; - case "first name": - rendered = (_c = words.first()) != null ? _c : VALUE_NOT_FOUND_FALLBACK; - break; - case "last name": - rendered = (_d = words.last()) != null ? _d : VALUE_NOT_FOUND_FALLBACK; - break; - case "full": - rendered = name; - break; - default: - return impossibleBranch(authorDisplay); - } - if (!strictDeepEqual(nonZeroCommit == null ? void 0 : nonZeroCommit.author, nonZeroCommit == null ? void 0 : nonZeroCommit.committer)) { - rendered = rendered + DIFFERING_AUTHOR_COMMITTER_MARKER; - } - return rendered; - } - renderAuthoringDate(nonZeroCommit, dateTimeFormatOptions, dateTimeFormatCustomString, dateTimeTimezone) { - var _a2; - const FALLBACK_COMMIT_DATE = "?"; - if (((_a2 = nonZeroCommit == null ? void 0 : nonZeroCommit.author) == null ? void 0 : _a2.epochSeconds) === void 0) - return FALLBACK_COMMIT_DATE; - let dateTimeFormatting; - switch (dateTimeFormatOptions) { - case "date": - dateTimeFormatting = DATE_FORMAT; - break; - case "datetime": - dateTimeFormatting = DATE_TIME_FORMAT_MINUTES; - break; - case "custom": - dateTimeFormatting = dateTimeFormatCustomString; - break; - case "natural language": - dateTimeFormatting = (time) => { - const diff3 = time.diff((0, import_obsidian10.moment)()); - const addFluentSuffix = true; - return import_obsidian10.moment.duration(diff3).humanize(addFluentSuffix); - }; - break; - default: - return impossibleBranch(dateTimeFormatOptions); - } - let authoringDate = import_obsidian10.moment.unix( - nonZeroCommit.author.epochSeconds - ); - switch (dateTimeTimezone) { - case "viewer-local": - break; - case "author-local": - authoringDate = authoringDate.utcOffset( - nonZeroCommit.author.tz - ); - dateTimeFormatting += " Z"; - break; - case "utc0000": - authoringDate = authoringDate.utc(); - dateTimeFormatting += "[Z]"; - break; - default: - return impossibleBranch(dateTimeTimezone); - } - if (typeof dateTimeFormatting === "string") { - return authoringDate.format(dateTimeFormatting); - } else { - return dateTimeFormatting(authoringDate); - } - } - adaptTextForFakeCommit(commit2, toBeRenderedText, options) { - var _a2, _b, _c, _d; - const original = (_b = (_a2 = getLongestRenderedGutter()) == null ? void 0 : _a2.text) != null ? _b : toBeRenderedText; - const fillCharacter = options !== "waiting-for-result" && commit2.isZeroCommit ? NEW_CHANGE_CHARACTER : UNINTRUSIVE_CHARACTER_FOR_WAITING_RENDERING; - toBeRenderedText = original.replace( - NON_WHITESPACE_REGEXP, - fillCharacter - ); - const desiredTextLength = (_d = (_c = latestSettings.get()) == null ? void 0 : _c.gutterSpacingFallbackLength) != null ? _d : toBeRenderedText.length; - toBeRenderedText = resizeToLength( - toBeRenderedText, - desiredTextLength, - fillCharacter - ); - if (options !== "waiting-for-result" && commit2.isZeroCommit) { - const numberOfLastCharactersToKeep = Math.min( - desiredTextLength, - NEW_CHANGE_NUMBER_OF_CHARACTERS - ); - toBeRenderedText = prefixOfLengthAsWhitespace( - toBeRenderedText, - desiredTextLength - numberOfLastCharactersToKeep - ); - } - return toBeRenderedText; - } -}; -function lineAuthoringGutterMarker(la, startLine, endLine, key2, settings, options) { - const digest = import_js_sha2562.sha256.create(); - digest.update(Object.values(settings).join(",")); - digest.update(`s${startLine}-e${endLine}-k${key2}-o${options}`); - const cacheKey = digest.hex(); - const cached = gutterInstances.get(cacheKey); - if (cached) - return cached; - const result = new LineAuthoringGutter( - la, - startLine, - endLine, - key2, - settings, - options - ); - gutterInstances.set(cacheKey, result); - return result; -} - -// src/lineAuthor/view/gutter/initial.ts -init_polyfill_buffer(); -var import_obsidian11 = require("obsidian"); -function initialSpacingGutter() { - var _a2, _b; - const length = (_b = (_a2 = latestSettings.get()) == null ? void 0 : _a2.gutterSpacingFallbackLength) != null ? _b : DEFAULT_SETTINGS.lineAuthor.gutterSpacingFallbackLength; - return new TextGutter(Array(length).fill("-").join("")); -} -function initialLineAuthoringGutter(settings) { - const { lineAuthoring, ageForInitialRender } = adaptiveInitialColoredWaitingLineAuthoring(settings); - return lineAuthoringGutterMarker( - lineAuthoring, - 1, - 1, - "initialGutter" + ageForInitialRender, - // use a age coloring based cache key - settings, - "waiting-for-result" - ); -} -function adaptiveInitialColoredWaitingLineAuthoring(settings) { - var _a2; - const ageForInitialRender = (_a2 = computeAdaptiveInitialColoringAgeInDays()) != null ? _a2 : maxAgeInDaysFromSettings(settings) * 0.25; - const slightlyOlderAgeForInitialRender = (0, import_obsidian11.moment)().add( - -ageForInitialRender, - "days" - ); - const dummyAuthor = { - name: "", - epochSeconds: momentToEpochSeconds(slightlyOlderAgeForInitialRender), - tz: "+0000" - }; - const dummyCommit = { - hash: "waiting-for-result", - author: dummyAuthor, - committer: dummyAuthor, - isZeroCommit: false - }; - return { - lineAuthoring: { - hashPerLine: [void 0, "waiting-for-result"], - commits: /* @__PURE__ */ new Map([["waiting-for-result", dummyCommit]]) - }, - ageForInitialRender - }; -} - -// src/lineAuthor/view/gutter/untrackedFile.ts -init_polyfill_buffer(); -function newUntrackedFileGutter(key2, settings) { - const dummyLineAuthoring = { - hashPerLine: [void 0, "000000"], - commits: /* @__PURE__ */ new Map([["000000", zeroCommit]]) - }; - return lineAuthoringGutterMarker(dummyLineAuthoring, 1, 1, key2, settings); -} - -// src/lineAuthor/view/view.ts -var UNDISPLAYED = new TextGutter(""); -var lineAuthorGutter = (0, import_view2.gutter)({ - class: "line-author-gutter-container", - markers(view) { - const lineAuthoring = view.state.field(lineAuthorState, false); - return lineAuthoringGutterMarkersRangeSet(view, lineAuthoring); - }, - lineMarkerChange(update2) { - const newLineAuthoringId = laStateDigest( - update2.state.field(lineAuthorState) - ); - const oldLineAuthoringId = laStateDigest( - update2.startState.field(lineAuthorState) - ); - return oldLineAuthoringId !== newLineAuthoringId; - }, - renderEmptyElements: true, - initialSpacer: (view) => { - temporaryWorkaroundGutterSpacingForRenderedLineAuthoring(view); - return initialSpacingGutter(); - }, - updateSpacer: (_sp, update2) => { - var _a2, _b; - temporaryWorkaroundGutterSpacingForRenderedLineAuthoring(update2.view); - return (_b = (_a2 = getLongestRenderedGutter()) == null ? void 0 : _a2.gutter) != null ? _b : initialSpacingGutter(); - } -}); -function lineAuthoringGutterMarkersRangeSet(view, optLA) { - const digest = laStateDigest(optLA); - const doc = view.state.doc; - const lineBlockEndPos = /* @__PURE__ */ new Map(); - for (let line = 1; line <= doc.lines; line++) { - const from = doc.line(line).from; - const to = view.lineBlockAt(from).to; - lineBlockEndPos.set(line, [from, to]); - digest.update([from, to, 0]); - } - const laSettings = latestSettings.get(); - digest.update("s" + Object.values(latestSettings).join(",")); - const cacheKey = digest.hex(); - const cached = gutterMarkersRangeSet.get(cacheKey); - if (cached) - return cached; - const { result, allowCache } = computeLineAuthoringGutterMarkersRangeSet( - doc, - lineBlockEndPos, - laSettings, - optLA - ); - if (allowCache) - gutterMarkersRangeSet.set(cacheKey, result); - return result; -} -function computeLineAuthoringGutterMarkersRangeSet(doc, blocksPerLine, settings, optLA) { - let allowCache = true; - const docLastLine = doc.lines; - const ranges = []; - function add2(from, to, gutter2) { - return ranges.push(gutter2.range(from, to)); - } - const lineFrom = computeLineMappingForUnsavedChanges(docLastLine, optLA); - const emptyDoc = doc.length === 0; - const lastLineIsEmpty = doc.iterLines(docLastLine, docLastLine + 1).next().value === ""; - for (let startLine = 1; startLine <= docLastLine; startLine++) { - const [from, to] = blocksPerLine.get(startLine); - const endLine = doc.lineAt(to).number; - if (emptyDoc) { - add2(from, to, UNDISPLAYED); - continue; - } - if (startLine === docLastLine && lastLineIsEmpty) { - add2(from, to, UNDISPLAYED); - continue; - } - if (optLA === void 0) { - add2(from, to, initialLineAuthoringGutter(settings)); - allowCache = false; - continue; - } - const { key: key2, la } = optLA; - if (la === "untracked") { - add2(from, to, newUntrackedFileGutter(la, settings)); - continue; - } - const lastAuthorLine = la.hashPerLine.length - 1; - const laStartLine = lineFrom[startLine]; - const laEndLine = lineFrom[endLine]; - if (laEndLine && laEndLine > lastAuthorLine) { - add2(from, to, UNDISPLAYED); - } - if (laStartLine !== void 0 && between(1, laStartLine, lastAuthorLine) && laEndLine !== void 0 && between(1, laEndLine, lastAuthorLine)) { - add2( - from, - to, - lineAuthoringGutterMarker( - la, - laStartLine, - laEndLine, - key2, - settings - ) - ); - continue; - } - if (lastAuthorLine < 1) { - add2(from, to, initialLineAuthoringGutter(settings)); - allowCache = false; - continue; - } - const start = Math.clamp(laStartLine != null ? laStartLine : startLine, 1, lastAuthorLine); - const end = Math.clamp(laEndLine != null ? laEndLine : endLine, 1, lastAuthorLine); - add2( - from, - to, - lineAuthoringGutterMarker( - la, - start, - end, - key2 + "computing", - settings, - "waiting-for-result" - ) - ); - } - return { result: import_state3.RangeSet.of( - ranges, - /* sort = */ - true - ), allowCache }; -} -function computeLineMappingForUnsavedChanges(docLastLine, optLA) { - if (!(optLA == null ? void 0 : optLA.lineOffsetsFromUnsavedChanges)) { - return Array.from(new Array(docLastLine + 1), (ln) => ln); - } - const lineFrom = [void 0]; - let cumulativeLineOffset = 0; - for (let ln = 1; ln <= docLastLine; ln++) { - const unsavedChanges = optLA.lineOffsetsFromUnsavedChanges.get(ln); - cumulativeLineOffset += unsavedChanges != null ? unsavedChanges : 0; - lineFrom[ln] = unsavedChanges === void 0 ? ln - cumulativeLineOffset : void 0; - } - return lineFrom; -} -function temporaryWorkaroundGutterSpacingForRenderedLineAuthoring(view) { - const guttersContainers = view.dom.querySelectorAll( - ".cm-gutters" - ); - guttersContainers.forEach((cont) => { - if (!(cont == null ? void 0 : cont.style)) - return; - if (!cont.style.marginLeft) { - cont.style.marginLeft = "unset"; - } - }); -} - -// src/lineAuthor/lineAuthorProvider.ts -var LineAuthorProvider = class { - constructor(plugin) { - this.plugin = plugin; - /** - * Saves all computed line authoring results. - * - * See {@link LineAuthoringId} - */ - this.lineAuthorings = /* @__PURE__ */ new Map(); - } - async trackChanged(file) { - this.trackChangedHelper(file).catch((reason) => { - console.warn("Git: Error in trackChanged." + reason); - return Promise.reject(reason); - }); - } - async trackChangedHelper(file) { - if (!file) - return; - if (file.path === void 0) { - console.warn( - "Git: Attempted to track change of undefined filepath. Unforeseen situation." - ); - return; - } - this.computeLineAuthorInfo(file.path); - } - destroy() { - this.lineAuthorings.clear(); - eventsPerFilePathSingleton.clear(); - clearViewCache(); - } - async computeLineAuthorInfo(filepath) { - const gitManager = this.plugin.lineAuthoringFeature.isAvailableOnCurrentPlatform().gitManager; - const headRevision = await gitManager.submoduleAwareHeadRevisonInContainingDirectory( - filepath - ); - const fileHash = await gitManager.hashObject(filepath); - const key2 = lineAuthoringId(headRevision, fileHash, filepath); - if (key2 === void 0) { - return; - } - if (this.lineAuthorings.has(key2)) { - } else { - const gitAuthorResult = await gitManager.blame( - filepath, - this.plugin.settings.lineAuthor.followMovement, - this.plugin.settings.lineAuthor.ignoreWhitespace - ); - this.lineAuthorings.set(key2, gitAuthorResult); - } - this.notifyComputationResultToSubscribers(filepath, key2); - } - notifyComputationResultToSubscribers(filepath, key2) { - eventsPerFilePathSingleton.ifFilepathDefinedTransformSubscribers( - filepath, - async (subs) => subs.forEach( - (sub) => sub.notifyLineAuthoring(key2, this.lineAuthorings.get(key2)) - ) - ); - } -}; -var enabledLineAuthorInfoExtensions = import_state4.Prec.high([ - subscribeNewEditor, - lineAuthorState, - lineAuthorGutter -]); - -// src/lineAuthor/lineAuthorIntegration.ts -var LineAuthoringFeature = class { - constructor(plg) { - this.plg = plg; - this.codeMirrorExtensions = []; - this.handleWorkspaceLeaf = (leaf) => { - const obsView = leaf == null ? void 0 : leaf.view; - const file = obsView == null ? void 0 : obsView.file; - if (!this.lineAuthorInfoProvider) { - console.warn( - "Git: undefined lineAuthorInfoProvider. Unexpected situation." - ); - return; - } - if (file === void 0 || (obsView == null ? void 0 : obsView.allowNoFile) === true) - return; - this.lineAuthorInfoProvider.trackChanged(file); - }; - } - // ========================= INIT and DE-INIT ========================== - onLoadPlugin() { - this.plg.registerEditorExtension(this.codeMirrorExtensions); - provideSettingsAccess( - () => this.plg.settings.lineAuthor, - (laSettings) => { - this.plg.settings.lineAuthor = laSettings; - this.plg.saveSettings(); - } - ); - } - conditionallyActivateBySettings() { - if (this.plg.settings.lineAuthor.show) { - this.activateFeature(); - } - } - activateFeature() { - try { - if (!this.isAvailableOnCurrentPlatform().available) - return; - setTextColorCssBasedOnSetting(this.plg.settings.lineAuthor); - this.lineAuthorInfoProvider = new LineAuthorProvider(this.plg); - this.createEventHandlers(); - this.activateCodeMirrorExtensions(); - console.log(this.plg.manifest.name + ": Enabled line authoring."); - } catch (e) { - console.warn("Git: Error while loading line authoring feature.", e); - this.deactivateFeature(); - } - } - /** - * Deactivates the feature. This function is very defensive, as it is also - * called to cleanup, if a critical error in the line authoring has occurred. - */ - deactivateFeature() { - var _a2; - this.destroyEventHandlers(); - this.deactivateCodeMirrorExtensions(); - (_a2 = this.lineAuthorInfoProvider) == null ? void 0 : _a2.destroy(); - this.lineAuthorInfoProvider = void 0; - console.log(this.plg.manifest.name + ": Disabled line authoring."); - } - isAvailableOnCurrentPlatform() { - return { - available: this.plg.useSimpleGit && import_obsidian12.Platform.isDesktopApp, - gitManager: this.plg.gitManager instanceof SimpleGit ? this.plg.gitManager : void 0 - }; - } - // ========================= REFRESH ========================== - refreshLineAuthorViews() { - if (this.plg.settings.lineAuthor.show) { - this.deactivateFeature(); - this.activateFeature(); - } - } - // ========================= CODEMIRROR EXTENSIONS ========================== - activateCodeMirrorExtensions() { - this.codeMirrorExtensions.push(enabledLineAuthorInfoExtensions); - this.plg.app.workspace.updateOptions(); - this.plg.app.workspace.iterateAllLeaves(this.handleWorkspaceLeaf); - } - deactivateCodeMirrorExtensions() { - for (const ext of this.codeMirrorExtensions) { - this.codeMirrorExtensions.remove(ext); - } - this.plg.app.workspace.updateOptions(); - } - // ========================= HANDLERS ========================== - createEventHandlers() { - this.gutterContextMenuEvent = this.createGutterContextMenuHandler(); - this.fileOpenEvent = this.createFileOpenEvent(); - this.workspaceLeafChangeEvent = this.createWorkspaceLeafChangeEvent(); - this.fileModificationEvent = this.createVaultFileModificationHandler(); - this.refreshOnCssChangeEvent = this.createCssRefreshHandler(); - this.fileRenameEvent = this.createFileRenameEvent(); - prepareGutterSearchForContextMenuHandling(); - this.plg.registerEvent(this.gutterContextMenuEvent); - this.plg.registerEvent(this.refreshOnCssChangeEvent); - this.plg.registerEvent(this.fileOpenEvent); - this.plg.registerEvent(this.workspaceLeafChangeEvent); - this.plg.registerEvent(this.fileModificationEvent); - this.plg.registerEvent(this.fileRenameEvent); - } - destroyEventHandlers() { - this.plg.app.workspace.offref(this.refreshOnCssChangeEvent); - this.plg.app.workspace.offref(this.fileOpenEvent); - this.plg.app.workspace.offref(this.workspaceLeafChangeEvent); - this.plg.app.workspace.offref(this.refreshOnCssChangeEvent); - this.plg.app.vault.offref(this.fileRenameEvent); - this.plg.app.workspace.offref(this.gutterContextMenuEvent); - } - createFileOpenEvent() { - return this.plg.app.workspace.on( - "file-open", - (file) => { - var _a2; - return (_a2 = this.lineAuthorInfoProvider) == null ? void 0 : _a2.trackChanged(file); - } - ); - } - createWorkspaceLeafChangeEvent() { - return this.plg.app.workspace.on( - "active-leaf-change", - this.handleWorkspaceLeaf - ); - } - createFileRenameEvent() { - return this.plg.app.vault.on( - "rename", - (file, _old) => { - var _a2; - return file instanceof import_obsidian12.TFile && ((_a2 = this.lineAuthorInfoProvider) == null ? void 0 : _a2.trackChanged(file)); - } - ); - } - createVaultFileModificationHandler() { - return this.plg.app.vault.on( - "modify", - (anyPath) => { - var _a2; - return anyPath instanceof import_obsidian12.TFile && ((_a2 = this.lineAuthorInfoProvider) == null ? void 0 : _a2.trackChanged(anyPath)); - } - ); - } - createCssRefreshHandler() { - return this.plg.app.workspace.on( - "css-change", - () => this.refreshLineAuthorViews() - ); - } - createGutterContextMenuHandler() { - return this.plg.app.workspace.on("editor-menu", handleContextMenu); - } -}; - -// src/promiseQueue.ts -init_polyfill_buffer(); -var PromiseQueue = class { - constructor() { - this.tasks = []; - } - addTask(task) { - this.tasks.push(task); - if (this.tasks.length === 1) { - this.handleTask(); - } - } - async handleTask() { - if (this.tasks.length > 0) { - this.tasks[0]().finally(() => { - this.tasks.shift(); - this.handleTask(); - }); - } - } -}; - -// src/statusBar.ts -init_polyfill_buffer(); -var import_obsidian13 = require("obsidian"); -var StatusBar = class { - constructor(statusBarEl, plugin) { - this.statusBarEl = statusBarEl; - this.plugin = plugin; - this.messages = []; - this.base = "obsidian-git-statusbar-"; - this.statusBarEl.setAttribute("data-tooltip-position", "top"); - addEventListener("git-refresh", this.refreshCommitTimestamp.bind(this)); - } - displayMessage(message, timeout) { - this.messages.push({ - message: `Git: ${message.slice(0, 100)}`, - timeout - }); - this.display(); - } - display() { - if (this.messages.length > 0 && !this.currentMessage) { - this.currentMessage = this.messages.shift(); - this.statusBarEl.addClass(this.base + "message"); - this.statusBarEl.ariaLabel = ""; - this.statusBarEl.setText(this.currentMessage.message); - this.lastMessageTimestamp = Date.now(); - } else if (this.currentMessage) { - const messageAge = Date.now() - this.lastMessageTimestamp; - if (messageAge >= this.currentMessage.timeout) { - this.currentMessage = null; - this.lastMessageTimestamp = null; - } - } else { - this.displayState(); - } - } - displayState() { - if (this.statusBarEl.getText().length > 3 || !this.statusBarEl.hasChildNodes()) { - this.statusBarEl.empty(); - this.iconEl = this.statusBarEl.createDiv(); - this.textEl = this.statusBarEl.createDiv(); - this.textEl.style.float = "right"; - this.textEl.style.marginLeft = "5px"; - this.iconEl.style.float = "left"; - } - switch (this.plugin.state) { - case 0 /* idle */: - this.displayFromNow(); - break; - case 1 /* status */: - this.statusBarEl.ariaLabel = "Checking repository status..."; - (0, import_obsidian13.setIcon)(this.iconEl, "refresh-cw"); - this.statusBarEl.addClass(this.base + "status"); - break; - case 3 /* add */: - this.statusBarEl.ariaLabel = "Adding files..."; - (0, import_obsidian13.setIcon)(this.iconEl, "refresh-w"); - this.statusBarEl.addClass(this.base + "add"); - break; - case 4 /* commit */: - this.statusBarEl.ariaLabel = "Committing changes..."; - (0, import_obsidian13.setIcon)(this.iconEl, "git-commit"); - this.statusBarEl.addClass(this.base + "commit"); - break; - case 5 /* push */: - this.statusBarEl.ariaLabel = "Pushing changes..."; - (0, import_obsidian13.setIcon)(this.iconEl, "upload"); - this.statusBarEl.addClass(this.base + "push"); - break; - case 2 /* pull */: - this.statusBarEl.ariaLabel = "Pulling changes..."; - (0, import_obsidian13.setIcon)(this.iconEl, "download"); - this.statusBarEl.addClass(this.base + "pull"); - break; - case 6 /* conflicted */: - this.statusBarEl.ariaLabel = "You have conflict files..."; - (0, import_obsidian13.setIcon)(this.iconEl, "alert-circle"); - this.statusBarEl.addClass(this.base + "conflict"); - break; - default: - this.statusBarEl.ariaLabel = "Failed on initialization!"; - (0, import_obsidian13.setIcon)(this.iconEl, "alert-triangle"); - this.statusBarEl.addClass(this.base + "failed-init"); - break; - } - } - displayFromNow() { - var _a2; - const timestamp = this.lastCommitTimestamp; - if (timestamp) { - const moment6 = window.moment; - const fromNow = moment6(timestamp).fromNow(); - this.statusBarEl.ariaLabel = `${this.plugin.offlineMode ? "Offline: " : ""}Last Commit: ${fromNow}`; - if ((_a2 = this.unPushedCommits) != null ? _a2 : 0 > 0) { - this.statusBarEl.ariaLabel += ` -(${this.unPushedCommits} unpushed commits)`; - } - } else { - this.statusBarEl.ariaLabel = this.plugin.offlineMode ? "Git is offline" : "Git is ready"; - } - if (this.plugin.offlineMode) { - (0, import_obsidian13.setIcon)(this.iconEl, "globe"); - } else { - (0, import_obsidian13.setIcon)(this.iconEl, "check"); - } - if (this.plugin.settings.changedFilesInStatusBar && this.plugin.cachedStatus) { - this.textEl.setText( - this.plugin.cachedStatus.changed.length.toString() - ); - } - this.statusBarEl.addClass(this.base + "idle"); - } - async refreshCommitTimestamp() { - this.lastCommitTimestamp = await this.plugin.gitManager.getLastCommitTime(); - this.unPushedCommits = await this.plugin.gitManager.getUnpushedCommits(); - } -}; - -// src/ui/modals/changedFilesModal.ts -init_polyfill_buffer(); -var import_obsidian14 = require("obsidian"); -var ChangedFilesModal = class extends import_obsidian14.FuzzySuggestModal { - constructor(plugin, changedFiles) { - super(plugin.app); - this.plugin = plugin; - this.changedFiles = changedFiles; - this.setPlaceholder( - "Not supported files will be opened by default app!" - ); - } - getItems() { - return this.changedFiles; - } - getItemText(item) { - if (item.index == "U" && item.working_dir == "U") { - return `Untracked | ${item.vault_path}`; - } - let working_dir = ""; - let index2 = ""; - if (item.working_dir != " ") - working_dir = `Working Dir: ${item.working_dir} `; - if (item.index != " ") - index2 = `Index: ${item.index}`; - return `${working_dir}${index2} | ${item.vault_path}`; - } - onChooseItem(item, _) { - if (this.plugin.app.metadataCache.getFirstLinkpathDest( - item.vault_path, - "" - ) == null) { - this.app.openWithDefaultApp(item.vault_path); - } else { - this.plugin.app.workspace.openLinkText(item.vault_path, "/"); - } - } -}; - -// src/ui/modals/customMessageModal.ts -init_polyfill_buffer(); -var import_obsidian15 = require("obsidian"); -var CustomMessageModal = class extends import_obsidian15.SuggestModal { - constructor(plugin, fromAutoBackup) { - super(plugin.app); - this.fromAutoBackup = fromAutoBackup; - this.resolve = null; - this.plugin = plugin; - this.setPlaceholder( - "Type your message and select optional the version with the added date." - ); - } - open() { - super.open(); - return new Promise((resolve) => { - this.resolve = resolve; - }); - } - onClose() { - if (this.resolve) - this.resolve(void 0); - } - selectSuggestion(value, evt) { - if (this.resolve) - this.resolve(value); - super.selectSuggestion(value, evt); - } - getSuggestions(query) { - const date = window.moment().format(this.plugin.settings.commitDateFormat); - if (query == "") - query = "..."; - return [query, `${date}: ${query}`, `${query}: ${date}`]; - } - renderSuggestion(value, el) { - el.innerText = value; - } - onChooseSuggestion(item, _) { - } -}; - -// src/openInGitHub.ts -init_polyfill_buffer(); -var import_obsidian16 = require("obsidian"); -async function openLineInGitHub(editor, file, manager) { - const data = await getData(manager); - if (data.result === "failure") { - new import_obsidian16.Notice(data.reason); - return; - } - const { isGitHub, branch: branch2, repo, user } = data; - if (isGitHub) { - const path2 = manager.getRelativeRepoPath(file.path); - const from = editor.getCursor("from").line + 1; - const to = editor.getCursor("to").line + 1; - if (from === to) { - window.open( - `https://github.com/${user}/${repo}/blob/${branch2}/${path2}?plain=1#L${from}` - ); - } else { - window.open( - `https://github.com/${user}/${repo}/blob/${branch2}/${path2}?plain=1#L${from}-L${to}` - ); - } - } else { - new import_obsidian16.Notice("It seems like you are not using GitHub"); - } -} -async function openHistoryInGitHub(file, manager) { - const data = await getData(manager); - if (data.result === "failure") { - new import_obsidian16.Notice(data.reason); - return; - } - const { isGitHub, branch: branch2, repo, user } = data; - const path2 = manager.getRelativeRepoPath(file.path); - if (isGitHub) { - window.open( - `https://github.com/${user}/${repo}/commits/${branch2}/${path2}` - ); - } else { - new import_obsidian16.Notice("It seems like you are not using GitHub"); - } -} -async function getData(manager) { - const branchInfo = await manager.branchInfo(); - const remoteBranch = branchInfo.tracking; - const branch2 = branchInfo.current; - if (remoteBranch == null) { - return { - result: "failure", - reason: "Remote branch is not configured" - }; - } - if (branch2 == null) { - return { - result: "failure", - reason: "Failed to get current branch name" - }; - } - const remote = remoteBranch.substring(0, remoteBranch.indexOf("/")); - const remoteUrl = await manager.getConfig( - `remote.${remote}.url` - ); - const [isGitHub, httpsUser, httpsRepo, sshUser, sshRepo] = remoteUrl.match( - /(?:^https:\/\/github\.com\/(.*)\/(.*)\.git$)|(?:^[a-zA-Z]+@github\.com:(.*)\/(.*)\.git$)/ - ); - return { - result: "success", - isGitHub: !!isGitHub, - repo: httpsRepo || sshRepo, - user: httpsUser || sshUser, - branch: branch2 - }; -} - -// src/setting/localStorageSettings.ts -init_polyfill_buffer(); -var LocalStorageSettings = class { - constructor(plugin) { - this.plugin = plugin; - this.prefix = this.plugin.manifest.id + ":"; - } - migrate() { - const keys = [ - "password", - "hostname", - "conflict", - "lastAutoPull", - "lastAutoBackup", - "lastAutoPush", - "gitPath", - "pluginDisabled" - ]; - for (const key2 of keys) { - const old = localStorage.getItem(this.prefix + key2); - if (app.loadLocalStorage(this.prefix + key2) == null && old != null) { - if (old != null) { - app.saveLocalStorage(this.prefix + key2, old); - localStorage.removeItem(this.prefix + key2); - } - } - } - } - getPassword() { - return app.loadLocalStorage(this.prefix + "password"); - } - setPassword(value) { - return app.saveLocalStorage(this.prefix + "password", value); - } - getUsername() { - return app.loadLocalStorage(this.prefix + "username"); - } - setUsername(value) { - return app.saveLocalStorage(this.prefix + "username", value); - } - getHostname() { - return app.loadLocalStorage(this.prefix + "hostname"); - } - setHostname(value) { - return app.saveLocalStorage(this.prefix + "hostname", value); - } - getConflict() { - return app.loadLocalStorage(this.prefix + "conflict") == "true"; - } - setConflict(value) { - return app.saveLocalStorage(this.prefix + "conflict", `${value}`); - } - getLastAutoPull() { - return app.loadLocalStorage(this.prefix + "lastAutoPull"); - } - setLastAutoPull(value) { - return app.saveLocalStorage(this.prefix + "lastAutoPull", value); - } - getLastAutoBackup() { - return app.loadLocalStorage(this.prefix + "lastAutoBackup"); - } - setLastAutoBackup(value) { - return app.saveLocalStorage(this.prefix + "lastAutoBackup", value); - } - getLastAutoPush() { - return app.loadLocalStorage(this.prefix + "lastAutoPush"); - } - setLastAutoPush(value) { - return app.saveLocalStorage(this.prefix + "lastAutoPush", value); - } - getGitPath() { - return app.loadLocalStorage(this.prefix + "gitPath"); - } - setGitPath(value) { - return app.saveLocalStorage(this.prefix + "gitPath", value); - } - getPATHPaths() { - var _a2, _b; - return (_b = (_a2 = app.loadLocalStorage(this.prefix + "PATHPaths")) == null ? void 0 : _a2.split(":")) != null ? _b : []; - } - setPATHPaths(value) { - return app.saveLocalStorage(this.prefix + "PATHPaths", value.join(":")); - } - getEnvVars() { - var _a2; - return JSON.parse( - (_a2 = app.loadLocalStorage(this.prefix + "envVars")) != null ? _a2 : "[]" - ); - } - setEnvVars(value) { - return app.saveLocalStorage( - this.prefix + "envVars", - JSON.stringify(value) - ); - } - getPluginDisabled() { - return app.loadLocalStorage(this.prefix + "pluginDisabled") == "true"; - } - setPluginDisabled(value) { - return app.saveLocalStorage(this.prefix + "pluginDisabled", `${value}`); - } -}; - -// src/ui/diff/diffView.ts -init_polyfill_buffer(); - -// node_modules/.pnpm/diff2html@3.4.47/node_modules/diff2html/lib-esm/diff2html.js -init_polyfill_buffer(); - -// node_modules/.pnpm/diff2html@3.4.47/node_modules/diff2html/lib-esm/diff-parser.js -init_polyfill_buffer(); - -// node_modules/.pnpm/diff2html@3.4.47/node_modules/diff2html/lib-esm/types.js -init_polyfill_buffer(); -var LineType; -(function(LineType2) { - LineType2["INSERT"] = "insert"; - LineType2["DELETE"] = "delete"; - LineType2["CONTEXT"] = "context"; -})(LineType || (LineType = {})); -var OutputFormatType = { - LINE_BY_LINE: "line-by-line", - SIDE_BY_SIDE: "side-by-side" -}; -var LineMatchingType = { - LINES: "lines", - WORDS: "words", - NONE: "none" -}; -var DiffStyleType = { - WORD: "word", - CHAR: "char" -}; -var ColorSchemeType; -(function(ColorSchemeType2) { - ColorSchemeType2["AUTO"] = "auto"; - ColorSchemeType2["DARK"] = "dark"; - ColorSchemeType2["LIGHT"] = "light"; -})(ColorSchemeType || (ColorSchemeType = {})); - -// node_modules/.pnpm/diff2html@3.4.47/node_modules/diff2html/lib-esm/utils.js -init_polyfill_buffer(); -var specials = [ - "-", - "[", - "]", - "/", - "{", - "}", - "(", - ")", - "*", - "+", - "?", - ".", - "\\", - "^", - "$", - "|" -]; -var regex = RegExp("[" + specials.join("\\") + "]", "g"); -function escapeForRegExp(str) { - return str.replace(regex, "\\$&"); -} -function unifyPath(path2) { - return path2 ? path2.replace(/\\/g, "/") : path2; -} -function hashCode(text2) { - let i, chr, len; - let hash2 = 0; - for (i = 0, len = text2.length; i < len; i++) { - chr = text2.charCodeAt(i); - hash2 = (hash2 << 5) - hash2 + chr; - hash2 |= 0; - } - return hash2; -} - -// node_modules/.pnpm/diff2html@3.4.47/node_modules/diff2html/lib-esm/diff-parser.js -function getExtension(filename, language) { - const filenameParts = filename.split("."); - return filenameParts.length > 1 ? filenameParts[filenameParts.length - 1] : language; -} -function startsWithAny(str, prefixes) { - return prefixes.reduce((startsWith, prefix) => startsWith || str.startsWith(prefix), false); -} -var baseDiffFilenamePrefixes = ["a/", "b/", "i/", "w/", "c/", "o/"]; -function getFilename(line, linePrefix, extraPrefix) { - const prefixes = extraPrefix !== void 0 ? [...baseDiffFilenamePrefixes, extraPrefix] : baseDiffFilenamePrefixes; - const FilenameRegExp = linePrefix ? new RegExp(`^${escapeForRegExp(linePrefix)} "?(.+?)"?$`) : new RegExp('^"?(.+?)"?$'); - const [, filename = ""] = FilenameRegExp.exec(line) || []; - const matchingPrefix = prefixes.find((p) => filename.indexOf(p) === 0); - const fnameWithoutPrefix = matchingPrefix ? filename.slice(matchingPrefix.length) : filename; - return fnameWithoutPrefix.replace(/\s+\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}(?:\.\d+)? [+-]\d{4}.*$/, ""); -} -function getSrcFilename(line, srcPrefix) { - return getFilename(line, "---", srcPrefix); -} -function getDstFilename(line, dstPrefix) { - return getFilename(line, "+++", dstPrefix); -} -function parse(diffInput, config = {}) { - const files = []; - let currentFile = null; - let currentBlock = null; - let oldLine = null; - let oldLine2 = null; - let newLine = null; - let possibleOldName = null; - let possibleNewName = null; - const oldFileNameHeader = "--- "; - const newFileNameHeader = "+++ "; - const hunkHeaderPrefix = "@@"; - const oldMode = /^old mode (\d{6})/; - const newMode = /^new mode (\d{6})/; - const deletedFileMode = /^deleted file mode (\d{6})/; - const newFileMode = /^new file mode (\d{6})/; - const copyFrom = /^copy from "?(.+)"?/; - const copyTo = /^copy to "?(.+)"?/; - const renameFrom = /^rename from "?(.+)"?/; - const renameTo = /^rename to "?(.+)"?/; - const similarityIndex = /^similarity index (\d+)%/; - const dissimilarityIndex = /^dissimilarity index (\d+)%/; - const index2 = /^index ([\da-z]+)\.\.([\da-z]+)\s*(\d{6})?/; - const binaryFiles = /^Binary files (.*) and (.*) differ/; - const binaryDiff = /^GIT binary patch/; - const combinedIndex = /^index ([\da-z]+),([\da-z]+)\.\.([\da-z]+)/; - const combinedMode = /^mode (\d{6}),(\d{6})\.\.(\d{6})/; - const combinedNewFile = /^new file mode (\d{6})/; - const combinedDeletedFile = /^deleted file mode (\d{6}),(\d{6})/; - const diffLines2 = diffInput.replace(/\\ No newline at end of file/g, "").replace(/\r\n?/g, "\n").split("\n"); - function saveBlock() { - if (currentBlock !== null && currentFile !== null) { - currentFile.blocks.push(currentBlock); - currentBlock = null; - } - } - function saveFile() { - if (currentFile !== null) { - if (!currentFile.oldName && possibleOldName !== null) { - currentFile.oldName = possibleOldName; - } - if (!currentFile.newName && possibleNewName !== null) { - currentFile.newName = possibleNewName; - } - if (currentFile.newName) { - files.push(currentFile); - currentFile = null; - } - } - possibleOldName = null; - possibleNewName = null; - } - function startFile() { - saveBlock(); - saveFile(); - currentFile = { - blocks: [], - deletedLines: 0, - addedLines: 0 - }; - } - function startBlock(line) { - saveBlock(); - let values; - if (currentFile !== null) { - if (values = /^@@ -(\d+)(?:,\d+)? \+(\d+)(?:,\d+)? @@.*/.exec(line)) { - currentFile.isCombined = false; - oldLine = parseInt(values[1], 10); - newLine = parseInt(values[2], 10); - } else if (values = /^@@@ -(\d+)(?:,\d+)? -(\d+)(?:,\d+)? \+(\d+)(?:,\d+)? @@@.*/.exec(line)) { - currentFile.isCombined = true; - oldLine = parseInt(values[1], 10); - oldLine2 = parseInt(values[2], 10); - newLine = parseInt(values[3], 10); - } else { - if (line.startsWith(hunkHeaderPrefix)) { - console.error("Failed to parse lines, starting in 0!"); - } - oldLine = 0; - newLine = 0; - currentFile.isCombined = false; - } - } - currentBlock = { - lines: [], - oldStartLine: oldLine, - oldStartLine2: oldLine2, - newStartLine: newLine, - header: line - }; - } - function createLine(line) { - if (currentFile === null || currentBlock === null || oldLine === null || newLine === null) - return; - const currentLine = { - content: line - }; - const addedPrefixes = currentFile.isCombined ? ["+ ", " +", "++"] : ["+"]; - const deletedPrefixes = currentFile.isCombined ? ["- ", " -", "--"] : ["-"]; - if (startsWithAny(line, addedPrefixes)) { - currentFile.addedLines++; - currentLine.type = LineType.INSERT; - currentLine.oldNumber = void 0; - currentLine.newNumber = newLine++; - } else if (startsWithAny(line, deletedPrefixes)) { - currentFile.deletedLines++; - currentLine.type = LineType.DELETE; - currentLine.oldNumber = oldLine++; - currentLine.newNumber = void 0; - } else { - currentLine.type = LineType.CONTEXT; - currentLine.oldNumber = oldLine++; - currentLine.newNumber = newLine++; - } - currentBlock.lines.push(currentLine); - } - function existHunkHeader(line, lineIdx) { - let idx = lineIdx; - while (idx < diffLines2.length - 3) { - if (line.startsWith("diff")) { - return false; - } - if (diffLines2[idx].startsWith(oldFileNameHeader) && diffLines2[idx + 1].startsWith(newFileNameHeader) && diffLines2[idx + 2].startsWith(hunkHeaderPrefix)) { - return true; - } - idx++; - } - return false; - } - diffLines2.forEach((line, lineIndex) => { - if (!line || line.startsWith("*")) { - return; - } - let values; - const prevLine = diffLines2[lineIndex - 1]; - const nxtLine = diffLines2[lineIndex + 1]; - const afterNxtLine = diffLines2[lineIndex + 2]; - if (line.startsWith("diff --git") || line.startsWith("diff --combined")) { - startFile(); - const gitDiffStart = /^diff --git "?([a-ciow]\/.+)"? "?([a-ciow]\/.+)"?/; - if (values = gitDiffStart.exec(line)) { - possibleOldName = getFilename(values[1], void 0, config.dstPrefix); - possibleNewName = getFilename(values[2], void 0, config.srcPrefix); - } - if (currentFile === null) { - throw new Error("Where is my file !!!"); - } - currentFile.isGitDiff = true; - return; - } - if (line.startsWith("Binary files") && !(currentFile === null || currentFile === void 0 ? void 0 : currentFile.isGitDiff)) { - startFile(); - const unixDiffBinaryStart = /^Binary files "?([a-ciow]\/.+)"? and "?([a-ciow]\/.+)"? differ/; - if (values = unixDiffBinaryStart.exec(line)) { - possibleOldName = getFilename(values[1], void 0, config.dstPrefix); - possibleNewName = getFilename(values[2], void 0, config.srcPrefix); - } - if (currentFile === null) { - throw new Error("Where is my file !!!"); - } - currentFile.isBinary = true; - return; - } - if (!currentFile || !currentFile.isGitDiff && currentFile && line.startsWith(oldFileNameHeader) && nxtLine.startsWith(newFileNameHeader) && afterNxtLine.startsWith(hunkHeaderPrefix)) { - startFile(); - } - if (currentFile === null || currentFile === void 0 ? void 0 : currentFile.isTooBig) { - return; - } - if (currentFile && (typeof config.diffMaxChanges === "number" && currentFile.addedLines + currentFile.deletedLines > config.diffMaxChanges || typeof config.diffMaxLineLength === "number" && line.length > config.diffMaxLineLength)) { - currentFile.isTooBig = true; - currentFile.addedLines = 0; - currentFile.deletedLines = 0; - currentFile.blocks = []; - currentBlock = null; - const message = typeof config.diffTooBigMessage === "function" ? config.diffTooBigMessage(files.length) : "Diff too big to be displayed"; - startBlock(message); - return; - } - if (line.startsWith(oldFileNameHeader) && nxtLine.startsWith(newFileNameHeader) || line.startsWith(newFileNameHeader) && prevLine.startsWith(oldFileNameHeader)) { - if (currentFile && !currentFile.oldName && line.startsWith("--- ") && (values = getSrcFilename(line, config.srcPrefix))) { - currentFile.oldName = values; - currentFile.language = getExtension(currentFile.oldName, currentFile.language); - return; - } - if (currentFile && !currentFile.newName && line.startsWith("+++ ") && (values = getDstFilename(line, config.dstPrefix))) { - currentFile.newName = values; - currentFile.language = getExtension(currentFile.newName, currentFile.language); - return; - } - } - if (currentFile && (line.startsWith(hunkHeaderPrefix) || currentFile.isGitDiff && currentFile.oldName && currentFile.newName && !currentBlock)) { - startBlock(line); - return; - } - if (currentBlock && (line.startsWith("+") || line.startsWith("-") || line.startsWith(" "))) { - createLine(line); - return; - } - const doesNotExistHunkHeader = !existHunkHeader(line, lineIndex); - if (currentFile === null) { - throw new Error("Where is my file !!!"); - } - if (values = oldMode.exec(line)) { - currentFile.oldMode = values[1]; - } else if (values = newMode.exec(line)) { - currentFile.newMode = values[1]; - } else if (values = deletedFileMode.exec(line)) { - currentFile.deletedFileMode = values[1]; - currentFile.isDeleted = true; - } else if (values = newFileMode.exec(line)) { - currentFile.newFileMode = values[1]; - currentFile.isNew = true; - } else if (values = copyFrom.exec(line)) { - if (doesNotExistHunkHeader) { - currentFile.oldName = values[1]; - } - currentFile.isCopy = true; - } else if (values = copyTo.exec(line)) { - if (doesNotExistHunkHeader) { - currentFile.newName = values[1]; - } - currentFile.isCopy = true; - } else if (values = renameFrom.exec(line)) { - if (doesNotExistHunkHeader) { - currentFile.oldName = values[1]; - } - currentFile.isRename = true; - } else if (values = renameTo.exec(line)) { - if (doesNotExistHunkHeader) { - currentFile.newName = values[1]; - } - currentFile.isRename = true; - } else if (values = binaryFiles.exec(line)) { - currentFile.isBinary = true; - currentFile.oldName = getFilename(values[1], void 0, config.srcPrefix); - currentFile.newName = getFilename(values[2], void 0, config.dstPrefix); - startBlock("Binary file"); - } else if (binaryDiff.test(line)) { - currentFile.isBinary = true; - startBlock(line); - } else if (values = similarityIndex.exec(line)) { - currentFile.unchangedPercentage = parseInt(values[1], 10); - } else if (values = dissimilarityIndex.exec(line)) { - currentFile.changedPercentage = parseInt(values[1], 10); - } else if (values = index2.exec(line)) { - currentFile.checksumBefore = values[1]; - currentFile.checksumAfter = values[2]; - values[3] && (currentFile.mode = values[3]); - } else if (values = combinedIndex.exec(line)) { - currentFile.checksumBefore = [values[2], values[3]]; - currentFile.checksumAfter = values[1]; - } else if (values = combinedMode.exec(line)) { - currentFile.oldMode = [values[2], values[3]]; - currentFile.newMode = values[1]; - } else if (values = combinedNewFile.exec(line)) { - currentFile.newFileMode = values[1]; - currentFile.isNew = true; - } else if (values = combinedDeletedFile.exec(line)) { - currentFile.deletedFileMode = values[1]; - currentFile.isDeleted = true; - } - }); - saveBlock(); - saveFile(); - return files; -} - -// node_modules/.pnpm/diff2html@3.4.47/node_modules/diff2html/lib-esm/file-list-renderer.js -init_polyfill_buffer(); - -// node_modules/.pnpm/diff2html@3.4.47/node_modules/diff2html/lib-esm/render-utils.js -init_polyfill_buffer(); - -// node_modules/.pnpm/diff@5.1.0/node_modules/diff/lib/index.mjs -init_polyfill_buffer(); -function Diff2() { -} -Diff2.prototype = { - diff: function diff2(oldString, newString) { - var options = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {}; - var callback = options.callback; - if (typeof options === "function") { - callback = options; - options = {}; - } - this.options = options; - var self2 = this; - function done(value) { - if (callback) { - setTimeout(function() { - callback(void 0, value); - }, 0); - return true; - } else { - return value; - } - } - oldString = this.castInput(oldString); - newString = this.castInput(newString); - oldString = this.removeEmpty(this.tokenize(oldString)); - newString = this.removeEmpty(this.tokenize(newString)); - var newLen = newString.length, oldLen = oldString.length; - var editLength = 1; - var maxEditLength = newLen + oldLen; - if (options.maxEditLength) { - maxEditLength = Math.min(maxEditLength, options.maxEditLength); - } - var bestPath = [{ - newPos: -1, - components: [] - }]; - var oldPos = this.extractCommon(bestPath[0], newString, oldString, 0); - if (bestPath[0].newPos + 1 >= newLen && oldPos + 1 >= oldLen) { - return done([{ - value: this.join(newString), - count: newString.length - }]); - } - function execEditLength() { - for (var diagonalPath = -1 * editLength; diagonalPath <= editLength; diagonalPath += 2) { - var basePath = void 0; - var addPath = bestPath[diagonalPath - 1], removePath = bestPath[diagonalPath + 1], _oldPos = (removePath ? removePath.newPos : 0) - diagonalPath; - if (addPath) { - bestPath[diagonalPath - 1] = void 0; - } - var canAdd = addPath && addPath.newPos + 1 < newLen, canRemove = removePath && 0 <= _oldPos && _oldPos < oldLen; - if (!canAdd && !canRemove) { - bestPath[diagonalPath] = void 0; - continue; - } - if (!canAdd || canRemove && addPath.newPos < removePath.newPos) { - basePath = clonePath(removePath); - self2.pushComponent(basePath.components, void 0, true); - } else { - basePath = addPath; - basePath.newPos++; - self2.pushComponent(basePath.components, true, void 0); - } - _oldPos = self2.extractCommon(basePath, newString, oldString, diagonalPath); - if (basePath.newPos + 1 >= newLen && _oldPos + 1 >= oldLen) { - return done(buildValues2(self2, basePath.components, newString, oldString, self2.useLongestToken)); - } else { - bestPath[diagonalPath] = basePath; - } - } - editLength++; - } - if (callback) { - (function exec() { - setTimeout(function() { - if (editLength > maxEditLength) { - return callback(); - } - if (!execEditLength()) { - exec(); - } - }, 0); - })(); - } else { - while (editLength <= maxEditLength) { - var ret = execEditLength(); - if (ret) { - return ret; - } - } - } - }, - pushComponent: function pushComponent(components, added, removed) { - var last2 = components[components.length - 1]; - if (last2 && last2.added === added && last2.removed === removed) { - components[components.length - 1] = { - count: last2.count + 1, - added, - removed - }; - } else { - components.push({ - count: 1, - added, - removed - }); - } - }, - extractCommon: function extractCommon2(basePath, newString, oldString, diagonalPath) { - var newLen = newString.length, oldLen = oldString.length, newPos = basePath.newPos, oldPos = newPos - diagonalPath, commonCount = 0; - while (newPos + 1 < newLen && oldPos + 1 < oldLen && this.equals(newString[newPos + 1], oldString[oldPos + 1])) { - newPos++; - oldPos++; - commonCount++; - } - if (commonCount) { - basePath.components.push({ - count: commonCount - }); - } - basePath.newPos = newPos; - return oldPos; - }, - equals: function equals2(left, right) { - if (this.options.comparator) { - return this.options.comparator(left, right); - } else { - return left === right || this.options.ignoreCase && left.toLowerCase() === right.toLowerCase(); - } - }, - removeEmpty: function removeEmpty2(array) { - var ret = []; - for (var i = 0; i < array.length; i++) { - if (array[i]) { - ret.push(array[i]); - } - } - return ret; - }, - castInput: function castInput2(value) { - return value; - }, - tokenize: function tokenize2(value) { - return value.split(""); - }, - join: function join4(chars) { - return chars.join(""); - } -}; -function buildValues2(diff3, components, newString, oldString, useLongestToken) { - var componentPos = 0, componentLen = components.length, newPos = 0, oldPos = 0; - for (; componentPos < componentLen; componentPos++) { - var component = components[componentPos]; - if (!component.removed) { - if (!component.added && useLongestToken) { - var value = newString.slice(newPos, newPos + component.count); - value = value.map(function(value2, i) { - var oldValue = oldString[oldPos + i]; - return oldValue.length > value2.length ? oldValue : value2; - }); - component.value = diff3.join(value); - } else { - component.value = diff3.join(newString.slice(newPos, newPos + component.count)); - } - newPos += component.count; - if (!component.added) { - oldPos += component.count; - } - } else { - component.value = diff3.join(oldString.slice(oldPos, oldPos + component.count)); - oldPos += component.count; - if (componentPos && components[componentPos - 1].added) { - var tmp = components[componentPos - 1]; - components[componentPos - 1] = components[componentPos]; - components[componentPos] = tmp; - } - } - } - var lastComponent = components[componentLen - 1]; - if (componentLen > 1 && typeof lastComponent.value === "string" && (lastComponent.added || lastComponent.removed) && diff3.equals("", lastComponent.value)) { - components[componentLen - 2].value += lastComponent.value; - components.pop(); - } - return components; -} -function clonePath(path2) { - return { - newPos: path2.newPos, - components: path2.components.slice(0) - }; -} -var characterDiff2 = new Diff2(); -function diffChars(oldStr, newStr, options) { - return characterDiff2.diff(oldStr, newStr, options); -} -var extendedWordChars2 = /^[A-Za-z\xC0-\u02C6\u02C8-\u02D7\u02DE-\u02FF\u1E00-\u1EFF]+$/; -var reWhitespace2 = /\S/; -var wordDiff2 = new Diff2(); -wordDiff2.equals = function(left, right) { - if (this.options.ignoreCase) { - left = left.toLowerCase(); - right = right.toLowerCase(); - } - return left === right || this.options.ignoreWhitespace && !reWhitespace2.test(left) && !reWhitespace2.test(right); -}; -wordDiff2.tokenize = function(value) { - var tokens = value.split(/([^\S\r\n]+|[()[\]{}'"\r\n]|\b)/); - for (var i = 0; i < tokens.length - 1; i++) { - if (!tokens[i + 1] && tokens[i + 2] && extendedWordChars2.test(tokens[i]) && extendedWordChars2.test(tokens[i + 2])) { - tokens[i] += tokens[i + 2]; - tokens.splice(i + 1, 2); - i--; - } - } - return tokens; -}; -function diffWordsWithSpace(oldStr, newStr, options) { - return wordDiff2.diff(oldStr, newStr, options); -} -var lineDiff2 = new Diff2(); -lineDiff2.tokenize = function(value) { - var retLines = [], linesAndNewlines = value.split(/(\n|\r\n)/); - if (!linesAndNewlines[linesAndNewlines.length - 1]) { - linesAndNewlines.pop(); - } - for (var i = 0; i < linesAndNewlines.length; i++) { - var line = linesAndNewlines[i]; - if (i % 2 && !this.options.newlineIsToken) { - retLines[retLines.length - 1] += line; - } else { - if (this.options.ignoreWhitespace) { - line = line.trim(); - } - retLines.push(line); - } - } - return retLines; -}; -var sentenceDiff2 = new Diff2(); -sentenceDiff2.tokenize = function(value) { - return value.split(/(\S.+?[.!?])(?=\s+|$)/); -}; -var cssDiff2 = new Diff2(); -cssDiff2.tokenize = function(value) { - return value.split(/([{}:;,]|\s+)/); -}; -function _typeof2(obj) { - "@babel/helpers - typeof"; - if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { - _typeof2 = function(obj2) { - return typeof obj2; - }; - } else { - _typeof2 = function(obj2) { - return obj2 && typeof Symbol === "function" && obj2.constructor === Symbol && obj2 !== Symbol.prototype ? "symbol" : typeof obj2; - }; - } - return _typeof2(obj); -} -var objectPrototypeToString2 = Object.prototype.toString; -var jsonDiff2 = new Diff2(); -jsonDiff2.useLongestToken = true; -jsonDiff2.tokenize = lineDiff2.tokenize; -jsonDiff2.castInput = function(value) { - var _this$options = this.options, undefinedReplacement = _this$options.undefinedReplacement, _this$options$stringi = _this$options.stringifyReplacer, stringifyReplacer = _this$options$stringi === void 0 ? function(k, v) { - return typeof v === "undefined" ? undefinedReplacement : v; - } : _this$options$stringi; - return typeof value === "string" ? value : JSON.stringify(canonicalize2(value, null, null, stringifyReplacer), stringifyReplacer, " "); -}; -jsonDiff2.equals = function(left, right) { - return Diff2.prototype.equals.call(jsonDiff2, left.replace(/,([\r\n])/g, "$1"), right.replace(/,([\r\n])/g, "$1")); -}; -function canonicalize2(obj, stack, replacementStack, replacer, key2) { - stack = stack || []; - replacementStack = replacementStack || []; - if (replacer) { - obj = replacer(key2, obj); - } - var i; - for (i = 0; i < stack.length; i += 1) { - if (stack[i] === obj) { - return replacementStack[i]; - } - } - var canonicalizedObj; - if ("[object Array]" === objectPrototypeToString2.call(obj)) { - stack.push(obj); - canonicalizedObj = new Array(obj.length); - replacementStack.push(canonicalizedObj); - for (i = 0; i < obj.length; i += 1) { - canonicalizedObj[i] = canonicalize2(obj[i], stack, replacementStack, replacer, key2); - } - stack.pop(); - replacementStack.pop(); - return canonicalizedObj; - } - if (obj && obj.toJSON) { - obj = obj.toJSON(); - } - if (_typeof2(obj) === "object" && obj !== null) { - stack.push(obj); - canonicalizedObj = {}; - replacementStack.push(canonicalizedObj); - var sortedKeys = [], _key; - for (_key in obj) { - if (obj.hasOwnProperty(_key)) { - sortedKeys.push(_key); - } - } - sortedKeys.sort(); - for (i = 0; i < sortedKeys.length; i += 1) { - _key = sortedKeys[i]; - canonicalizedObj[_key] = canonicalize2(obj[_key], stack, replacementStack, replacer, _key); - } - stack.pop(); - replacementStack.pop(); - } else { - canonicalizedObj = obj; - } - return canonicalizedObj; -} -var arrayDiff2 = new Diff2(); -arrayDiff2.tokenize = function(value) { - return value.slice(); -}; -arrayDiff2.join = arrayDiff2.removeEmpty = function(value) { - return value; -}; - -// node_modules/.pnpm/diff2html@3.4.47/node_modules/diff2html/lib-esm/rematch.js -init_polyfill_buffer(); -function levenshtein(a, b) { - if (a.length === 0) { - return b.length; - } - if (b.length === 0) { - return a.length; - } - const matrix = []; - let i; - for (i = 0; i <= b.length; i++) { - matrix[i] = [i]; - } - let j; - for (j = 0; j <= a.length; j++) { - matrix[0][j] = j; - } - for (i = 1; i <= b.length; i++) { - for (j = 1; j <= a.length; j++) { - if (b.charAt(i - 1) === a.charAt(j - 1)) { - matrix[i][j] = matrix[i - 1][j - 1]; - } else { - matrix[i][j] = Math.min(matrix[i - 1][j - 1] + 1, Math.min(matrix[i][j - 1] + 1, matrix[i - 1][j] + 1)); - } - } - } - return matrix[b.length][a.length]; -} -function newDistanceFn(str) { - return (x, y) => { - const xValue = str(x).trim(); - const yValue = str(y).trim(); - const lev = levenshtein(xValue, yValue); - return lev / (xValue.length + yValue.length); - }; -} -function newMatcherFn(distance2) { - function findBestMatch(a, b, cache = /* @__PURE__ */ new Map()) { - let bestMatchDist = Infinity; - let bestMatch; - for (let i = 0; i < a.length; ++i) { - for (let j = 0; j < b.length; ++j) { - const cacheKey = JSON.stringify([a[i], b[j]]); - let md; - if (!(cache.has(cacheKey) && (md = cache.get(cacheKey)))) { - md = distance2(a[i], b[j]); - cache.set(cacheKey, md); - } - if (md < bestMatchDist) { - bestMatchDist = md; - bestMatch = { indexA: i, indexB: j, score: bestMatchDist }; - } - } - } - return bestMatch; - } - function group(a, b, level = 0, cache = /* @__PURE__ */ new Map()) { - const bm = findBestMatch(a, b, cache); - if (!bm || a.length + b.length < 3) { - return [[a, b]]; - } - const a1 = a.slice(0, bm.indexA); - const b1 = b.slice(0, bm.indexB); - const aMatch = [a[bm.indexA]]; - const bMatch = [b[bm.indexB]]; - const tailA = bm.indexA + 1; - const tailB = bm.indexB + 1; - const a2 = a.slice(tailA); - const b2 = b.slice(tailB); - const group1 = group(a1, b1, level + 1, cache); - const groupMatch = group(aMatch, bMatch, level + 1, cache); - const group2 = group(a2, b2, level + 1, cache); - let result = groupMatch; - if (bm.indexA > 0 || bm.indexB > 0) { - result = group1.concat(result); - } - if (a.length > tailA || b.length > tailB) { - result = result.concat(group2); - } - return result; - } - return group; -} - -// node_modules/.pnpm/diff2html@3.4.47/node_modules/diff2html/lib-esm/render-utils.js -var CSSLineClass = { - INSERTS: "d2h-ins", - DELETES: "d2h-del", - CONTEXT: "d2h-cntx", - INFO: "d2h-info", - INSERT_CHANGES: "d2h-ins d2h-change", - DELETE_CHANGES: "d2h-del d2h-change" -}; -var defaultRenderConfig = { - matching: LineMatchingType.NONE, - matchWordsThreshold: 0.25, - maxLineLengthHighlight: 1e4, - diffStyle: DiffStyleType.WORD, - colorScheme: ColorSchemeType.LIGHT -}; -var separator = "/"; -var distance = newDistanceFn((change) => change.value); -var matcher = newMatcherFn(distance); -function isDevNullName(name) { - return name.indexOf("dev/null") !== -1; -} -function removeInsElements(line) { - return line.replace(/(]*>((.|\n)*?)<\/ins>)/g, ""); -} -function removeDelElements(line) { - return line.replace(/(]*>((.|\n)*?)<\/del>)/g, ""); -} -function toCSSClass(lineType) { - switch (lineType) { - case LineType.CONTEXT: - return CSSLineClass.CONTEXT; - case LineType.INSERT: - return CSSLineClass.INSERTS; - case LineType.DELETE: - return CSSLineClass.DELETES; - } -} -function colorSchemeToCss(colorScheme) { - switch (colorScheme) { - case ColorSchemeType.DARK: - return "d2h-dark-color-scheme"; - case ColorSchemeType.AUTO: - return "d2h-auto-color-scheme"; - case ColorSchemeType.LIGHT: - default: - return "d2h-light-color-scheme"; - } -} -function prefixLength(isCombined) { - return isCombined ? 2 : 1; -} -function escapeForHtml(str) { - return str.slice(0).replace(/&/g, "&").replace(//g, ">").replace(/"/g, """).replace(/'/g, "'").replace(/\//g, "/"); -} -function deconstructLine(line, isCombined, escape = true) { - const indexToSplit = prefixLength(isCombined); - return { - prefix: line.substring(0, indexToSplit), - content: escape ? escapeForHtml(line.substring(indexToSplit)) : line.substring(indexToSplit) - }; -} -function filenameDiff(file) { - const oldFilename = unifyPath(file.oldName); - const newFilename = unifyPath(file.newName); - if (oldFilename !== newFilename && !isDevNullName(oldFilename) && !isDevNullName(newFilename)) { - const prefixPaths = []; - const suffixPaths = []; - const oldFilenameParts = oldFilename.split(separator); - const newFilenameParts = newFilename.split(separator); - const oldFilenamePartsSize = oldFilenameParts.length; - const newFilenamePartsSize = newFilenameParts.length; - let i = 0; - let j = oldFilenamePartsSize - 1; - let k = newFilenamePartsSize - 1; - while (i < j && i < k) { - if (oldFilenameParts[i] === newFilenameParts[i]) { - prefixPaths.push(newFilenameParts[i]); - i += 1; - } else { - break; - } - } - while (j > i && k > i) { - if (oldFilenameParts[j] === newFilenameParts[k]) { - suffixPaths.unshift(newFilenameParts[k]); - j -= 1; - k -= 1; - } else { - break; - } - } - const finalPrefix = prefixPaths.join(separator); - const finalSuffix = suffixPaths.join(separator); - const oldRemainingPath = oldFilenameParts.slice(i, j + 1).join(separator); - const newRemainingPath = newFilenameParts.slice(i, k + 1).join(separator); - if (finalPrefix.length && finalSuffix.length) { - return finalPrefix + separator + "{" + oldRemainingPath + " \u2192 " + newRemainingPath + "}" + separator + finalSuffix; - } else if (finalPrefix.length) { - return finalPrefix + separator + "{" + oldRemainingPath + " \u2192 " + newRemainingPath + "}"; - } else if (finalSuffix.length) { - return "{" + oldRemainingPath + " \u2192 " + newRemainingPath + "}" + separator + finalSuffix; - } - return oldFilename + " \u2192 " + newFilename; - } else if (!isDevNullName(newFilename)) { - return newFilename; - } else { - return oldFilename; - } -} -function getHtmlId(file) { - return `d2h-${hashCode(filenameDiff(file)).toString().slice(-6)}`; -} -function getFileIcon(file) { - let templateName = "file-changed"; - if (file.isRename) { - templateName = "file-renamed"; - } else if (file.isCopy) { - templateName = "file-renamed"; - } else if (file.isNew) { - templateName = "file-added"; - } else if (file.isDeleted) { - templateName = "file-deleted"; - } else if (file.newName !== file.oldName) { - templateName = "file-renamed"; - } - return templateName; -} -function diffHighlight(diffLine1, diffLine2, isCombined, config = {}) { - const { matching, maxLineLengthHighlight, matchWordsThreshold, diffStyle } = Object.assign(Object.assign({}, defaultRenderConfig), config); - const line1 = deconstructLine(diffLine1, isCombined, false); - const line2 = deconstructLine(diffLine2, isCombined, false); - if (line1.content.length > maxLineLengthHighlight || line2.content.length > maxLineLengthHighlight) { - return { - oldLine: { - prefix: line1.prefix, - content: escapeForHtml(line1.content) - }, - newLine: { - prefix: line2.prefix, - content: escapeForHtml(line2.content) - } - }; - } - const diff3 = diffStyle === "char" ? diffChars(line1.content, line2.content) : diffWordsWithSpace(line1.content, line2.content); - const changedWords = []; - if (diffStyle === "word" && matching === "words") { - const removed = diff3.filter((element2) => element2.removed); - const added = diff3.filter((element2) => element2.added); - const chunks = matcher(added, removed); - chunks.forEach((chunk) => { - if (chunk[0].length === 1 && chunk[1].length === 1) { - const dist = distance(chunk[0][0], chunk[1][0]); - if (dist < matchWordsThreshold) { - changedWords.push(chunk[0][0]); - changedWords.push(chunk[1][0]); - } - } - }); - } - const highlightedLine = diff3.reduce((highlightedLine2, part) => { - const elemType = part.added ? "ins" : part.removed ? "del" : null; - const addClass = changedWords.indexOf(part) > -1 ? ' class="d2h-change"' : ""; - const escapedValue = escapeForHtml(part.value); - return elemType !== null ? `${highlightedLine2}<${elemType}${addClass}>${escapedValue}` : `${highlightedLine2}${escapedValue}`; - }, ""); - return { - oldLine: { - prefix: line1.prefix, - content: removeInsElements(highlightedLine) - }, - newLine: { - prefix: line2.prefix, - content: removeDelElements(highlightedLine) - } - }; -} - -// node_modules/.pnpm/diff2html@3.4.47/node_modules/diff2html/lib-esm/file-list-renderer.js -var baseTemplatesPath = "file-summary"; -var iconsBaseTemplatesPath = "icon"; -var defaultFileListRendererConfig = { - colorScheme: defaultRenderConfig.colorScheme -}; -var FileListRenderer = class { - constructor(hoganUtils, config = {}) { - this.hoganUtils = hoganUtils; - this.config = Object.assign(Object.assign({}, defaultFileListRendererConfig), config); - } - render(diffFiles) { - const files = diffFiles.map((file) => this.hoganUtils.render(baseTemplatesPath, "line", { - fileHtmlId: getHtmlId(file), - oldName: file.oldName, - newName: file.newName, - fileName: filenameDiff(file), - deletedLines: "-" + file.deletedLines, - addedLines: "+" + file.addedLines - }, { - fileIcon: this.hoganUtils.template(iconsBaseTemplatesPath, getFileIcon(file)) - })).join("\n"); - return this.hoganUtils.render(baseTemplatesPath, "wrapper", { - colorScheme: colorSchemeToCss(this.config.colorScheme), - filesNumber: diffFiles.length, - files - }); - } -}; - -// node_modules/.pnpm/diff2html@3.4.47/node_modules/diff2html/lib-esm/line-by-line-renderer.js -init_polyfill_buffer(); -var defaultLineByLineRendererConfig = Object.assign(Object.assign({}, defaultRenderConfig), { renderNothingWhenEmpty: false, matchingMaxComparisons: 2500, maxLineSizeInBlockForComparison: 200 }); -var genericTemplatesPath = "generic"; -var baseTemplatesPath2 = "line-by-line"; -var iconsBaseTemplatesPath2 = "icon"; -var tagsBaseTemplatesPath = "tag"; -var LineByLineRenderer = class { - constructor(hoganUtils, config = {}) { - this.hoganUtils = hoganUtils; - this.config = Object.assign(Object.assign({}, defaultLineByLineRendererConfig), config); - } - render(diffFiles) { - const diffsHtml = diffFiles.map((file) => { - let diffs; - if (file.blocks.length) { - diffs = this.generateFileHtml(file); - } else { - diffs = this.generateEmptyDiff(); - } - return this.makeFileDiffHtml(file, diffs); - }).join("\n"); - return this.hoganUtils.render(genericTemplatesPath, "wrapper", { - colorScheme: colorSchemeToCss(this.config.colorScheme), - content: diffsHtml - }); - } - makeFileDiffHtml(file, diffs) { - if (this.config.renderNothingWhenEmpty && Array.isArray(file.blocks) && file.blocks.length === 0) - return ""; - const fileDiffTemplate = this.hoganUtils.template(baseTemplatesPath2, "file-diff"); - const filePathTemplate = this.hoganUtils.template(genericTemplatesPath, "file-path"); - const fileIconTemplate = this.hoganUtils.template(iconsBaseTemplatesPath2, "file"); - const fileTagTemplate = this.hoganUtils.template(tagsBaseTemplatesPath, getFileIcon(file)); - return fileDiffTemplate.render({ - file, - fileHtmlId: getHtmlId(file), - diffs, - filePath: filePathTemplate.render({ - fileDiffName: filenameDiff(file) - }, { - fileIcon: fileIconTemplate, - fileTag: fileTagTemplate - }) - }); - } - generateEmptyDiff() { - return this.hoganUtils.render(genericTemplatesPath, "empty-diff", { - contentClass: "d2h-code-line", - CSSLineClass - }); - } - generateFileHtml(file) { - const matcher2 = newMatcherFn(newDistanceFn((e) => deconstructLine(e.content, file.isCombined).content)); - return file.blocks.map((block) => { - let lines = this.hoganUtils.render(genericTemplatesPath, "block-header", { - CSSLineClass, - blockHeader: file.isTooBig ? block.header : escapeForHtml(block.header), - lineClass: "d2h-code-linenumber", - contentClass: "d2h-code-line" - }); - this.applyLineGroupping(block).forEach(([contextLines, oldLines, newLines]) => { - if (oldLines.length && newLines.length && !contextLines.length) { - this.applyRematchMatching(oldLines, newLines, matcher2).map(([oldLines2, newLines2]) => { - const { left, right } = this.processChangedLines(file, file.isCombined, oldLines2, newLines2); - lines += left; - lines += right; - }); - } else if (contextLines.length) { - contextLines.forEach((line) => { - const { prefix, content } = deconstructLine(line.content, file.isCombined); - lines += this.generateSingleLineHtml(file, { - type: CSSLineClass.CONTEXT, - prefix, - content, - oldNumber: line.oldNumber, - newNumber: line.newNumber - }); - }); - } else if (oldLines.length || newLines.length) { - const { left, right } = this.processChangedLines(file, file.isCombined, oldLines, newLines); - lines += left; - lines += right; - } else { - console.error("Unknown state reached while processing groups of lines", contextLines, oldLines, newLines); - } - }); - return lines; - }).join("\n"); - } - applyLineGroupping(block) { - const blockLinesGroups = []; - let oldLines = []; - let newLines = []; - for (let i = 0; i < block.lines.length; i++) { - const diffLine = block.lines[i]; - if (diffLine.type !== LineType.INSERT && newLines.length || diffLine.type === LineType.CONTEXT && oldLines.length > 0) { - blockLinesGroups.push([[], oldLines, newLines]); - oldLines = []; - newLines = []; - } - if (diffLine.type === LineType.CONTEXT) { - blockLinesGroups.push([[diffLine], [], []]); - } else if (diffLine.type === LineType.INSERT && oldLines.length === 0) { - blockLinesGroups.push([[], [], [diffLine]]); - } else if (diffLine.type === LineType.INSERT && oldLines.length > 0) { - newLines.push(diffLine); - } else if (diffLine.type === LineType.DELETE) { - oldLines.push(diffLine); - } - } - if (oldLines.length || newLines.length) { - blockLinesGroups.push([[], oldLines, newLines]); - oldLines = []; - newLines = []; - } - return blockLinesGroups; - } - applyRematchMatching(oldLines, newLines, matcher2) { - const comparisons = oldLines.length * newLines.length; - const maxLineSizeInBlock = Math.max.apply(null, [0].concat(oldLines.concat(newLines).map((elem) => elem.content.length))); - const doMatching = comparisons < this.config.matchingMaxComparisons && maxLineSizeInBlock < this.config.maxLineSizeInBlockForComparison && (this.config.matching === "lines" || this.config.matching === "words"); - return doMatching ? matcher2(oldLines, newLines) : [[oldLines, newLines]]; - } - processChangedLines(file, isCombined, oldLines, newLines) { - const fileHtml = { - right: "", - left: "" - }; - const maxLinesNumber = Math.max(oldLines.length, newLines.length); - for (let i = 0; i < maxLinesNumber; i++) { - const oldLine = oldLines[i]; - const newLine = newLines[i]; - const diff3 = oldLine !== void 0 && newLine !== void 0 ? diffHighlight(oldLine.content, newLine.content, isCombined, this.config) : void 0; - const preparedOldLine = oldLine !== void 0 && oldLine.oldNumber !== void 0 ? Object.assign(Object.assign({}, diff3 !== void 0 ? { - prefix: diff3.oldLine.prefix, - content: diff3.oldLine.content, - type: CSSLineClass.DELETE_CHANGES - } : Object.assign(Object.assign({}, deconstructLine(oldLine.content, isCombined)), { type: toCSSClass(oldLine.type) })), { oldNumber: oldLine.oldNumber, newNumber: oldLine.newNumber }) : void 0; - const preparedNewLine = newLine !== void 0 && newLine.newNumber !== void 0 ? Object.assign(Object.assign({}, diff3 !== void 0 ? { - prefix: diff3.newLine.prefix, - content: diff3.newLine.content, - type: CSSLineClass.INSERT_CHANGES - } : Object.assign(Object.assign({}, deconstructLine(newLine.content, isCombined)), { type: toCSSClass(newLine.type) })), { oldNumber: newLine.oldNumber, newNumber: newLine.newNumber }) : void 0; - const { left, right } = this.generateLineHtml(file, preparedOldLine, preparedNewLine); - fileHtml.left += left; - fileHtml.right += right; - } - return fileHtml; - } - generateLineHtml(file, oldLine, newLine) { - return { - left: this.generateSingleLineHtml(file, oldLine), - right: this.generateSingleLineHtml(file, newLine) - }; - } - generateSingleLineHtml(file, line) { - if (line === void 0) - return ""; - const lineNumberHtml = this.hoganUtils.render(baseTemplatesPath2, "numbers", { - oldNumber: line.oldNumber || "", - newNumber: line.newNumber || "" - }); - return this.hoganUtils.render(genericTemplatesPath, "line", { - type: line.type, - lineClass: "d2h-code-linenumber", - contentClass: "d2h-code-line", - prefix: line.prefix === " " ? " " : line.prefix, - content: line.content, - lineNumber: lineNumberHtml, - line, - file - }); - } -}; - -// node_modules/.pnpm/diff2html@3.4.47/node_modules/diff2html/lib-esm/side-by-side-renderer.js -init_polyfill_buffer(); -var defaultSideBySideRendererConfig = Object.assign(Object.assign({}, defaultRenderConfig), { renderNothingWhenEmpty: false, matchingMaxComparisons: 2500, maxLineSizeInBlockForComparison: 200 }); -var genericTemplatesPath2 = "generic"; -var baseTemplatesPath3 = "side-by-side"; -var iconsBaseTemplatesPath3 = "icon"; -var tagsBaseTemplatesPath2 = "tag"; -var SideBySideRenderer = class { - constructor(hoganUtils, config = {}) { - this.hoganUtils = hoganUtils; - this.config = Object.assign(Object.assign({}, defaultSideBySideRendererConfig), config); - } - render(diffFiles) { - const diffsHtml = diffFiles.map((file) => { - let diffs; - if (file.blocks.length) { - diffs = this.generateFileHtml(file); - } else { - diffs = this.generateEmptyDiff(); - } - return this.makeFileDiffHtml(file, diffs); - }).join("\n"); - return this.hoganUtils.render(genericTemplatesPath2, "wrapper", { - colorScheme: colorSchemeToCss(this.config.colorScheme), - content: diffsHtml - }); - } - makeFileDiffHtml(file, diffs) { - if (this.config.renderNothingWhenEmpty && Array.isArray(file.blocks) && file.blocks.length === 0) - return ""; - const fileDiffTemplate = this.hoganUtils.template(baseTemplatesPath3, "file-diff"); - const filePathTemplate = this.hoganUtils.template(genericTemplatesPath2, "file-path"); - const fileIconTemplate = this.hoganUtils.template(iconsBaseTemplatesPath3, "file"); - const fileTagTemplate = this.hoganUtils.template(tagsBaseTemplatesPath2, getFileIcon(file)); - return fileDiffTemplate.render({ - file, - fileHtmlId: getHtmlId(file), - diffs, - filePath: filePathTemplate.render({ - fileDiffName: filenameDiff(file) - }, { - fileIcon: fileIconTemplate, - fileTag: fileTagTemplate - }) - }); - } - generateEmptyDiff() { - return { - right: "", - left: this.hoganUtils.render(genericTemplatesPath2, "empty-diff", { - contentClass: "d2h-code-side-line", - CSSLineClass - }) - }; - } - generateFileHtml(file) { - const matcher2 = newMatcherFn(newDistanceFn((e) => deconstructLine(e.content, file.isCombined).content)); - return file.blocks.map((block) => { - const fileHtml = { - left: this.makeHeaderHtml(block.header, file), - right: this.makeHeaderHtml("") - }; - this.applyLineGroupping(block).forEach(([contextLines, oldLines, newLines]) => { - if (oldLines.length && newLines.length && !contextLines.length) { - this.applyRematchMatching(oldLines, newLines, matcher2).map(([oldLines2, newLines2]) => { - const { left, right } = this.processChangedLines(file.isCombined, oldLines2, newLines2); - fileHtml.left += left; - fileHtml.right += right; - }); - } else if (contextLines.length) { - contextLines.forEach((line) => { - const { prefix, content } = deconstructLine(line.content, file.isCombined); - const { left, right } = this.generateLineHtml({ - type: CSSLineClass.CONTEXT, - prefix, - content, - number: line.oldNumber - }, { - type: CSSLineClass.CONTEXT, - prefix, - content, - number: line.newNumber - }); - fileHtml.left += left; - fileHtml.right += right; - }); - } else if (oldLines.length || newLines.length) { - const { left, right } = this.processChangedLines(file.isCombined, oldLines, newLines); - fileHtml.left += left; - fileHtml.right += right; - } else { - console.error("Unknown state reached while processing groups of lines", contextLines, oldLines, newLines); - } - }); - return fileHtml; - }).reduce((accomulated, html2) => { - return { left: accomulated.left + html2.left, right: accomulated.right + html2.right }; - }, { left: "", right: "" }); - } - applyLineGroupping(block) { - const blockLinesGroups = []; - let oldLines = []; - let newLines = []; - for (let i = 0; i < block.lines.length; i++) { - const diffLine = block.lines[i]; - if (diffLine.type !== LineType.INSERT && newLines.length || diffLine.type === LineType.CONTEXT && oldLines.length > 0) { - blockLinesGroups.push([[], oldLines, newLines]); - oldLines = []; - newLines = []; - } - if (diffLine.type === LineType.CONTEXT) { - blockLinesGroups.push([[diffLine], [], []]); - } else if (diffLine.type === LineType.INSERT && oldLines.length === 0) { - blockLinesGroups.push([[], [], [diffLine]]); - } else if (diffLine.type === LineType.INSERT && oldLines.length > 0) { - newLines.push(diffLine); - } else if (diffLine.type === LineType.DELETE) { - oldLines.push(diffLine); - } - } - if (oldLines.length || newLines.length) { - blockLinesGroups.push([[], oldLines, newLines]); - oldLines = []; - newLines = []; - } - return blockLinesGroups; - } - applyRematchMatching(oldLines, newLines, matcher2) { - const comparisons = oldLines.length * newLines.length; - const maxLineSizeInBlock = Math.max.apply(null, [0].concat(oldLines.concat(newLines).map((elem) => elem.content.length))); - const doMatching = comparisons < this.config.matchingMaxComparisons && maxLineSizeInBlock < this.config.maxLineSizeInBlockForComparison && (this.config.matching === "lines" || this.config.matching === "words"); - return doMatching ? matcher2(oldLines, newLines) : [[oldLines, newLines]]; - } - makeHeaderHtml(blockHeader, file) { - return this.hoganUtils.render(genericTemplatesPath2, "block-header", { - CSSLineClass, - blockHeader: (file === null || file === void 0 ? void 0 : file.isTooBig) ? blockHeader : escapeForHtml(blockHeader), - lineClass: "d2h-code-side-linenumber", - contentClass: "d2h-code-side-line" - }); - } - processChangedLines(isCombined, oldLines, newLines) { - const fileHtml = { - right: "", - left: "" - }; - const maxLinesNumber = Math.max(oldLines.length, newLines.length); - for (let i = 0; i < maxLinesNumber; i++) { - const oldLine = oldLines[i]; - const newLine = newLines[i]; - const diff3 = oldLine !== void 0 && newLine !== void 0 ? diffHighlight(oldLine.content, newLine.content, isCombined, this.config) : void 0; - const preparedOldLine = oldLine !== void 0 && oldLine.oldNumber !== void 0 ? Object.assign(Object.assign({}, diff3 !== void 0 ? { - prefix: diff3.oldLine.prefix, - content: diff3.oldLine.content, - type: CSSLineClass.DELETE_CHANGES - } : Object.assign(Object.assign({}, deconstructLine(oldLine.content, isCombined)), { type: toCSSClass(oldLine.type) })), { number: oldLine.oldNumber }) : void 0; - const preparedNewLine = newLine !== void 0 && newLine.newNumber !== void 0 ? Object.assign(Object.assign({}, diff3 !== void 0 ? { - prefix: diff3.newLine.prefix, - content: diff3.newLine.content, - type: CSSLineClass.INSERT_CHANGES - } : Object.assign(Object.assign({}, deconstructLine(newLine.content, isCombined)), { type: toCSSClass(newLine.type) })), { number: newLine.newNumber }) : void 0; - const { left, right } = this.generateLineHtml(preparedOldLine, preparedNewLine); - fileHtml.left += left; - fileHtml.right += right; - } - return fileHtml; - } - generateLineHtml(oldLine, newLine) { - return { - left: this.generateSingleHtml(oldLine), - right: this.generateSingleHtml(newLine) - }; - } - generateSingleHtml(line) { - const lineClass = "d2h-code-side-linenumber"; - const contentClass = "d2h-code-side-line"; - return this.hoganUtils.render(genericTemplatesPath2, "line", { - type: (line === null || line === void 0 ? void 0 : line.type) || `${CSSLineClass.CONTEXT} d2h-emptyplaceholder`, - lineClass: line !== void 0 ? lineClass : `${lineClass} d2h-code-side-emptyplaceholder`, - contentClass: line !== void 0 ? contentClass : `${contentClass} d2h-code-side-emptyplaceholder`, - prefix: (line === null || line === void 0 ? void 0 : line.prefix) === " " ? " " : line === null || line === void 0 ? void 0 : line.prefix, - content: line === null || line === void 0 ? void 0 : line.content, - lineNumber: line === null || line === void 0 ? void 0 : line.number - }); - } -}; - -// node_modules/.pnpm/diff2html@3.4.47/node_modules/diff2html/lib-esm/hoganjs-utils.js -init_polyfill_buffer(); -var Hogan3 = __toESM(require_hogan()); - -// node_modules/.pnpm/diff2html@3.4.47/node_modules/diff2html/lib-esm/diff2html-templates.js -init_polyfill_buffer(); -var Hogan2 = __toESM(require_hogan()); -var defaultTemplates = {}; -defaultTemplates["file-summary-line"] = new Hogan2.Template({ code: function(c, p, i) { - var t = this; - t.b(i = i || ""); - t.b('
  • '); - t.b("\n" + i); - t.b(' '); - t.b("\n" + i); - t.b(t.rp("'); - t.b(t.v(t.f("fileName", c, p, 0))); - t.b(""); - t.b("\n" + i); - t.b(' '); - t.b("\n" + i); - t.b(' '); - t.b(t.v(t.f("addedLines", c, p, 0))); - t.b(""); - t.b("\n" + i); - t.b(' '); - t.b(t.v(t.f("deletedLines", c, p, 0))); - t.b(""); - t.b("\n" + i); - t.b(" "); - t.b("\n" + i); - t.b(" "); - t.b("\n" + i); - t.b("
  • "); - return t.fl(); -}, partials: { "'); - t.b("\n" + i); - t.b('
    '); - t.b("\n" + i); - t.b(' Files changed ('); - t.b(t.v(t.f("filesNumber", c, p, 0))); - t.b(")"); - t.b("\n" + i); - t.b(' hide'); - t.b("\n" + i); - t.b(' show'); - t.b("\n" + i); - t.b("
    "); - t.b("\n" + i); - t.b('
      '); - t.b("\n" + i); - t.b(" "); - t.b(t.t(t.f("files", c, p, 0))); - t.b("\n" + i); - t.b("
    "); - t.b("\n" + i); - t.b(""); - return t.fl(); -}, partials: {}, subs: {} }); -defaultTemplates["generic-block-header"] = new Hogan2.Template({ code: function(c, p, i) { - var t = this; - t.b(i = i || ""); - t.b(""); - t.b("\n" + i); - t.b(' '); - t.b("\n" + i); - t.b(' '); - t.b("\n" + i); - t.b('
    '); - if (t.s(t.f("blockHeader", c, p, 1), c, p, 0, 156, 173, "{{ }}")) { - t.rs(c, p, function(c2, p2, t2) { - t2.b(t2.t(t2.f("blockHeader", c2, p2, 0))); - }); - c.pop(); - } - if (!t.s(t.f("blockHeader", c, p, 1), c, p, 1, 0, 0, "")) { - t.b(" "); - } - ; - t.b("
    "); - t.b("\n" + i); - t.b(" "); - t.b("\n" + i); - t.b(""); - return t.fl(); -}, partials: {}, subs: {} }); -defaultTemplates["generic-empty-diff"] = new Hogan2.Template({ code: function(c, p, i) { - var t = this; - t.b(i = i || ""); - t.b(""); - t.b("\n" + i); - t.b(' '); - t.b("\n" + i); - t.b('
    '); - t.b("\n" + i); - t.b(" File without changes"); - t.b("\n" + i); - t.b("
    "); - t.b("\n" + i); - t.b(" "); - t.b("\n" + i); - t.b(""); - return t.fl(); -}, partials: {}, subs: {} }); -defaultTemplates["generic-file-path"] = new Hogan2.Template({ code: function(c, p, i) { - var t = this; - t.b(i = i || ""); - t.b(''); - t.b("\n" + i); - t.b(t.rp("'); - t.b(t.v(t.f("fileDiffName", c, p, 0))); - t.b(""); - t.b("\n" + i); - t.b(t.rp(""); - t.b("\n" + i); - t.b('"); - return t.fl(); -}, partials: { ""); - t.b("\n" + i); - t.b(' '); - t.b("\n" + i); - t.b(" "); - t.b(t.t(t.f("lineNumber", c, p, 0))); - t.b("\n" + i); - t.b(" "); - t.b("\n" + i); - t.b(' '); - t.b("\n" + i); - t.b('
    '); - t.b("\n" + i); - if (t.s(t.f("prefix", c, p, 1), c, p, 0, 162, 238, "{{ }}")) { - t.rs(c, p, function(c2, p2, t2) { - t2.b(' '); - t2.b(t2.t(t2.f("prefix", c2, p2, 0))); - t2.b(""); - t2.b("\n" + i); - }); - c.pop(); - } - if (!t.s(t.f("prefix", c, p, 1), c, p, 1, 0, 0, "")) { - t.b('  '); - t.b("\n" + i); - } - ; - if (t.s(t.f("content", c, p, 1), c, p, 0, 371, 445, "{{ }}")) { - t.rs(c, p, function(c2, p2, t2) { - t2.b(' '); - t2.b(t2.t(t2.f("content", c2, p2, 0))); - t2.b(""); - t2.b("\n" + i); - }); - c.pop(); - } - if (!t.s(t.f("content", c, p, 1), c, p, 1, 0, 0, "")) { - t.b('
    '); - t.b("\n" + i); - } - ; - t.b("
    "); - t.b("\n" + i); - t.b(" "); - t.b("\n" + i); - t.b(""); - return t.fl(); -}, partials: {}, subs: {} }); -defaultTemplates["generic-wrapper"] = new Hogan2.Template({ code: function(c, p, i) { - var t = this; - t.b(i = i || ""); - t.b('
    '); - t.b("\n" + i); - t.b(" "); - t.b(t.t(t.f("content", c, p, 0))); - t.b("\n" + i); - t.b("
    "); - return t.fl(); -}, partials: {}, subs: {} }); -defaultTemplates["icon-file-added"] = new Hogan2.Template({ code: function(c, p, i) { - var t = this; - t.b(i = i || ""); - t.b('"); - return t.fl(); -}, partials: {}, subs: {} }); -defaultTemplates["icon-file-changed"] = new Hogan2.Template({ code: function(c, p, i) { - var t = this; - t.b(i = i || ""); - t.b('"); - return t.fl(); -}, partials: {}, subs: {} }); -defaultTemplates["icon-file-deleted"] = new Hogan2.Template({ code: function(c, p, i) { - var t = this; - t.b(i = i || ""); - t.b('"); - return t.fl(); -}, partials: {}, subs: {} }); -defaultTemplates["icon-file-renamed"] = new Hogan2.Template({ code: function(c, p, i) { - var t = this; - t.b(i = i || ""); - t.b('"); - return t.fl(); -}, partials: {}, subs: {} }); -defaultTemplates["icon-file"] = new Hogan2.Template({ code: function(c, p, i) { - var t = this; - t.b(i = i || ""); - t.b('"); - return t.fl(); -}, partials: {}, subs: {} }); -defaultTemplates["line-by-line-file-diff"] = new Hogan2.Template({ code: function(c, p, i) { - var t = this; - t.b(i = i || ""); - t.b('
    '); - t.b("\n" + i); - t.b('
    '); - t.b("\n" + i); - t.b(" "); - t.b(t.t(t.f("filePath", c, p, 0))); - t.b("\n" + i); - t.b("
    "); - t.b("\n" + i); - t.b('
    '); - t.b("\n" + i); - t.b('
    '); - t.b("\n" + i); - t.b(' '); - t.b("\n" + i); - t.b(' '); - t.b("\n" + i); - t.b(" "); - t.b(t.t(t.f("diffs", c, p, 0))); - t.b("\n" + i); - t.b(" "); - t.b("\n" + i); - t.b("
    "); - t.b("\n" + i); - t.b("
    "); - t.b("\n" + i); - t.b("
    "); - t.b("\n" + i); - t.b("
    "); - return t.fl(); -}, partials: {}, subs: {} }); -defaultTemplates["line-by-line-numbers"] = new Hogan2.Template({ code: function(c, p, i) { - var t = this; - t.b(i = i || ""); - t.b('
    '); - t.b(t.v(t.f("oldNumber", c, p, 0))); - t.b("
    "); - t.b("\n" + i); - t.b('
    '); - t.b(t.v(t.f("newNumber", c, p, 0))); - t.b("
    "); - return t.fl(); -}, partials: {}, subs: {} }); -defaultTemplates["side-by-side-file-diff"] = new Hogan2.Template({ code: function(c, p, i) { - var t = this; - t.b(i = i || ""); - t.b('
    '); - t.b("\n" + i); - t.b('
    '); - t.b("\n" + i); - t.b(" "); - t.b(t.t(t.f("filePath", c, p, 0))); - t.b("\n" + i); - t.b("
    "); - t.b("\n" + i); - t.b('
    '); - t.b("\n" + i); - t.b('
    '); - t.b("\n" + i); - t.b('
    '); - t.b("\n" + i); - t.b(' '); - t.b("\n" + i); - t.b(' '); - t.b("\n" + i); - t.b(" "); - t.b(t.t(t.d("diffs.left", c, p, 0))); - t.b("\n" + i); - t.b(" "); - t.b("\n" + i); - t.b("
    "); - t.b("\n" + i); - t.b("
    "); - t.b("\n" + i); - t.b("
    "); - t.b("\n" + i); - t.b('
    '); - t.b("\n" + i); - t.b('
    '); - t.b("\n" + i); - t.b(' '); - t.b("\n" + i); - t.b(' '); - t.b("\n" + i); - t.b(" "); - t.b(t.t(t.d("diffs.right", c, p, 0))); - t.b("\n" + i); - t.b(" "); - t.b("\n" + i); - t.b("
    "); - t.b("\n" + i); - t.b("
    "); - t.b("\n" + i); - t.b("
    "); - t.b("\n" + i); - t.b("
    "); - t.b("\n" + i); - t.b("
    "); - return t.fl(); -}, partials: {}, subs: {} }); -defaultTemplates["tag-file-added"] = new Hogan2.Template({ code: function(c, p, i) { - var t = this; - t.b(i = i || ""); - t.b('ADDED'); - return t.fl(); -}, partials: {}, subs: {} }); -defaultTemplates["tag-file-changed"] = new Hogan2.Template({ code: function(c, p, i) { - var t = this; - t.b(i = i || ""); - t.b('CHANGED'); - return t.fl(); -}, partials: {}, subs: {} }); -defaultTemplates["tag-file-deleted"] = new Hogan2.Template({ code: function(c, p, i) { - var t = this; - t.b(i = i || ""); - t.b('DELETED'); - return t.fl(); -}, partials: {}, subs: {} }); -defaultTemplates["tag-file-renamed"] = new Hogan2.Template({ code: function(c, p, i) { - var t = this; - t.b(i = i || ""); - t.b('RENAMED'); - return t.fl(); -}, partials: {}, subs: {} }); - -// node_modules/.pnpm/diff2html@3.4.47/node_modules/diff2html/lib-esm/hoganjs-utils.js -var HoganJsUtils = class { - constructor({ compiledTemplates = {}, rawTemplates = {} }) { - const compiledRawTemplates = Object.entries(rawTemplates).reduce((previousTemplates, [name, templateString]) => { - const compiledTemplate = Hogan3.compile(templateString, { asString: false }); - return Object.assign(Object.assign({}, previousTemplates), { [name]: compiledTemplate }); - }, {}); - this.preCompiledTemplates = Object.assign(Object.assign(Object.assign({}, defaultTemplates), compiledTemplates), compiledRawTemplates); - } - static compile(templateString) { - return Hogan3.compile(templateString, { asString: false }); - } - render(namespace, view, params, partials, indent2) { - const templateKey = this.templateKey(namespace, view); - try { - const template = this.preCompiledTemplates[templateKey]; - return template.render(params, partials, indent2); - } catch (e) { - throw new Error(`Could not find template to render '${templateKey}'`); - } - } - template(namespace, view) { - return this.preCompiledTemplates[this.templateKey(namespace, view)]; - } - templateKey(namespace, view) { - return `${namespace}-${view}`; - } -}; - -// node_modules/.pnpm/diff2html@3.4.47/node_modules/diff2html/lib-esm/diff2html.js -var defaultDiff2HtmlConfig = Object.assign(Object.assign(Object.assign({}, defaultLineByLineRendererConfig), defaultSideBySideRendererConfig), { outputFormat: OutputFormatType.LINE_BY_LINE, drawFileList: true }); -function html(diffInput, configuration = {}) { - const config = Object.assign(Object.assign({}, defaultDiff2HtmlConfig), configuration); - const diffJson = typeof diffInput === "string" ? parse(diffInput, config) : diffInput; - const hoganUtils = new HoganJsUtils(config); - const { colorScheme } = config; - const fileListRendererConfig = { colorScheme }; - const fileList = config.drawFileList ? new FileListRenderer(hoganUtils, fileListRendererConfig).render(diffJson) : ""; - const diffOutput = config.outputFormat === "side-by-side" ? new SideBySideRenderer(hoganUtils, config).render(diffJson) : new LineByLineRenderer(hoganUtils, config).render(diffJson); - return fileList + diffOutput; -} - -// src/ui/diff/diffView.ts -var import_obsidian17 = require("obsidian"); -var DiffView = class extends import_obsidian17.ItemView { - constructor(leaf, plugin) { - super(leaf); - this.plugin = plugin; - this.gettingDiff = false; - this.gitRefreshBind = this.refresh.bind(this); - this.gitViewRefreshBind = this.refresh.bind(this); - this.parser = new DOMParser(); - this.navigation = true; - addEventListener("git-refresh", this.gitRefreshBind); - addEventListener("git-view-refresh", this.gitViewRefreshBind); - } - getViewType() { - return DIFF_VIEW_CONFIG.type; - } - getDisplayText() { - var _a2; - if (((_a2 = this.state) == null ? void 0 : _a2.file) != null) { - let fileName = this.state.file.split("/").last(); - if (fileName == null ? void 0 : fileName.endsWith(".md")) - fileName = fileName.slice(0, -3); - return DIFF_VIEW_CONFIG.name + ` (${fileName})`; - } - return DIFF_VIEW_CONFIG.name; - } - getIcon() { - return DIFF_VIEW_CONFIG.icon; - } - async setState(state, result) { - this.state = state; - if (import_obsidian17.Platform.isMobile) { - this.leaf.view.titleEl.textContent = this.getDisplayText(); - } - await this.refresh(); - } - getState() { - return this.state; - } - onClose() { - removeEventListener("git-refresh", this.gitRefreshBind); - removeEventListener("git-view-refresh", this.gitViewRefreshBind); - return super.onClose(); - } - onOpen() { - this.refresh(); - return super.onOpen(); - } - async refresh() { - var _a2; - if (((_a2 = this.state) == null ? void 0 : _a2.file) && !this.gettingDiff && this.plugin.gitManager) { - this.gettingDiff = true; - try { - let diff3 = await this.plugin.gitManager.getDiffString( - this.state.file, - this.state.staged, - this.state.hash - ); - this.contentEl.empty(); - if (!diff3) { - if (this.plugin.gitManager instanceof SimpleGit && await this.plugin.gitManager.isTracked( - this.state.file - )) { - diff3 = [ - `--- ${this.state.file}`, - `+++ ${this.state.file}`, - "" - ].join("\n"); - } else { - const content = await this.app.vault.adapter.read( - this.plugin.gitManager.getRelativeVaultPath( - this.state.file - ) - ); - const header = `--- /dev/null -+++ ${this.state.file} -@@ -0,0 +1,${content.split("\n").length} @@`; - diff3 = [ - ...header.split("\n"), - ...content.split("\n").map((line) => `+${line}`) - ].join("\n"); - } - } - const diffEl = this.parser.parseFromString(html(diff3), "text/html").querySelector(".d2h-file-diff"); - this.contentEl.append(diffEl); - } finally { - this.gettingDiff = false; - } - } - } -}; - -// src/ui/history/historyView.ts -init_polyfill_buffer(); -var import_obsidian21 = require("obsidian"); - -// src/ui/history/historyView.svelte -init_polyfill_buffer(); - -// node_modules/.pnpm/svelte@4.2.10/node_modules/svelte/src/runtime/internal/index.js -init_polyfill_buffer(); - -// node_modules/.pnpm/svelte@4.2.10/node_modules/svelte/src/runtime/internal/animations.js -init_polyfill_buffer(); - -// node_modules/.pnpm/svelte@4.2.10/node_modules/svelte/src/runtime/internal/utils.js -init_polyfill_buffer(); -function noop() { -} -var identity = (x) => x; -function run(fn) { - return fn(); -} -function blank_object() { - return /* @__PURE__ */ Object.create(null); -} -function run_all(fns) { - fns.forEach(run); -} -function is_function(thing) { - return typeof thing === "function"; -} -function safe_not_equal(a, b) { - return a != a ? b == b : a !== b || a && typeof a === "object" || typeof a === "function"; -} -function is_empty(obj) { - return Object.keys(obj).length === 0; -} - -// node_modules/.pnpm/svelte@4.2.10/node_modules/svelte/src/runtime/internal/environment.js -init_polyfill_buffer(); -var is_client = typeof window !== "undefined"; -var now = is_client ? () => window.performance.now() : () => Date.now(); -var raf = is_client ? (cb) => requestAnimationFrame(cb) : noop; - -// node_modules/.pnpm/svelte@4.2.10/node_modules/svelte/src/runtime/internal/loop.js -init_polyfill_buffer(); -var tasks = /* @__PURE__ */ new Set(); -function run_tasks(now2) { - tasks.forEach((task) => { - if (!task.c(now2)) { - tasks.delete(task); - task.f(); - } - }); - if (tasks.size !== 0) - raf(run_tasks); -} -function loop(callback) { - let task; - if (tasks.size === 0) - raf(run_tasks); - return { - promise: new Promise((fulfill) => { - tasks.add(task = { c: callback, f: fulfill }); - }), - abort() { - tasks.delete(task); - } - }; -} - -// node_modules/.pnpm/svelte@4.2.10/node_modules/svelte/src/runtime/internal/style_manager.js -init_polyfill_buffer(); - -// node_modules/.pnpm/svelte@4.2.10/node_modules/svelte/src/runtime/internal/dom.js -init_polyfill_buffer(); - -// node_modules/.pnpm/svelte@4.2.10/node_modules/svelte/src/runtime/internal/ResizeObserverSingleton.js -init_polyfill_buffer(); - -// node_modules/.pnpm/svelte@4.2.10/node_modules/svelte/src/runtime/internal/globals.js -init_polyfill_buffer(); -var globals = typeof window !== "undefined" ? window : typeof globalThis !== "undefined" ? globalThis : ( - // @ts-ignore Node typings have this - global -); - -// node_modules/.pnpm/svelte@4.2.10/node_modules/svelte/src/runtime/internal/ResizeObserverSingleton.js -var ResizeObserverSingleton = class _ResizeObserverSingleton { - /** @param {ResizeObserverOptions} options */ - constructor(options) { - /** - * @private - * @readonly - * @type {WeakMap} - */ - __publicField(this, "_listeners", "WeakMap" in globals ? /* @__PURE__ */ new WeakMap() : void 0); - /** - * @private - * @type {ResizeObserver} - */ - __publicField(this, "_observer"); - /** @type {ResizeObserverOptions} */ - __publicField(this, "options"); - this.options = options; - } - /** - * @param {Element} element - * @param {import('./private.js').Listener} listener - * @returns {() => void} - */ - observe(element2, listener) { - this._listeners.set(element2, listener); - this._getObserver().observe(element2, this.options); - return () => { - this._listeners.delete(element2); - this._observer.unobserve(element2); - }; - } - /** - * @private - */ - _getObserver() { - var _a2; - return (_a2 = this._observer) != null ? _a2 : this._observer = new ResizeObserver((entries) => { - var _a3; - for (const entry of entries) { - _ResizeObserverSingleton.entries.set(entry.target, entry); - (_a3 = this._listeners.get(entry.target)) == null ? void 0 : _a3(entry); - } - }); - } -}; -ResizeObserverSingleton.entries = "WeakMap" in globals ? /* @__PURE__ */ new WeakMap() : void 0; - -// node_modules/.pnpm/svelte@4.2.10/node_modules/svelte/src/runtime/internal/dom.js -var is_hydrating = false; -function start_hydrating() { - is_hydrating = true; -} -function end_hydrating() { - is_hydrating = false; -} -function append2(target, node) { - target.appendChild(node); -} -function append_styles(target, style_sheet_id, styles) { - const append_styles_to = get_root_for_style(target); - if (!append_styles_to.getElementById(style_sheet_id)) { - const style = element("style"); - style.id = style_sheet_id; - style.textContent = styles; - append_stylesheet(append_styles_to, style); - } -} -function get_root_for_style(node) { - if (!node) - return document; - const root2 = node.getRootNode ? node.getRootNode() : node.ownerDocument; - if (root2 && /** @type {ShadowRoot} */ - root2.host) { - return ( - /** @type {ShadowRoot} */ - root2 - ); - } - return node.ownerDocument; -} -function append_empty_stylesheet(node) { - const style_element = element("style"); - style_element.textContent = "/* empty */"; - append_stylesheet(get_root_for_style(node), style_element); - return style_element.sheet; -} -function append_stylesheet(node, style) { - append2( - /** @type {Document} */ - node.head || node, - style - ); - return style.sheet; -} -function insert(target, node, anchor) { - target.insertBefore(node, anchor || null); -} -function detach(node) { - if (node.parentNode) { - node.parentNode.removeChild(node); - } -} -function destroy_each(iterations, detaching) { - for (let i = 0; i < iterations.length; i += 1) { - if (iterations[i]) - iterations[i].d(detaching); - } -} -function element(name) { - return document.createElement(name); -} -function text(data) { - return document.createTextNode(data); -} -function space() { - return text(" "); -} -function empty() { - return text(""); -} -function listen(node, event, handler, options) { - node.addEventListener(event, handler, options); - return () => node.removeEventListener(event, handler, options); -} -function stop_propagation(fn) { - return function(event) { - event.stopPropagation(); - return fn.call(this, event); - }; -} -function attr(node, attribute, value) { - if (value == null) - node.removeAttribute(attribute); - else if (node.getAttribute(attribute) !== value) - node.setAttribute(attribute, value); -} -function children(element2) { - return Array.from(element2.childNodes); -} -function set_data(text2, data) { - data = "" + data; - if (text2.data === data) - return; - text2.data = /** @type {string} */ - data; -} -function set_input_value(input, value) { - input.value = value == null ? "" : value; -} -function set_style(node, key2, value, important) { - if (value == null) { - node.style.removeProperty(key2); - } else { - node.style.setProperty(key2, value, important ? "important" : ""); - } -} -function toggle_class(element2, name, toggle) { - element2.classList.toggle(name, !!toggle); -} -function custom_event(type, detail, { bubbles = false, cancelable = false } = {}) { - return new CustomEvent(type, { detail, bubbles, cancelable }); -} -function get_custom_elements_slots(element2) { - const result = {}; - element2.childNodes.forEach( - /** @param {Element} node */ - (node) => { - result[node.slot || "default"] = true; - } - ); - return result; -} - -// node_modules/.pnpm/svelte@4.2.10/node_modules/svelte/src/runtime/internal/style_manager.js -var managed_styles = /* @__PURE__ */ new Map(); -var active = 0; -function hash(str) { - let hash2 = 5381; - let i = str.length; - while (i--) - hash2 = (hash2 << 5) - hash2 ^ str.charCodeAt(i); - return hash2 >>> 0; -} -function create_style_information(doc, node) { - const info = { stylesheet: append_empty_stylesheet(node), rules: {} }; - managed_styles.set(doc, info); - return info; -} -function create_rule(node, a, b, duration, delay2, ease, fn, uid = 0) { - const step = 16.666 / duration; - let keyframes = "{\n"; - for (let p = 0; p <= 1; p += step) { - const t = a + (b - a) * ease(p); - keyframes += p * 100 + `%{${fn(t, 1 - t)}} -`; - } - const rule = keyframes + `100% {${fn(b, 1 - b)}} -}`; - const name = `__svelte_${hash(rule)}_${uid}`; - const doc = get_root_for_style(node); - const { stylesheet, rules } = managed_styles.get(doc) || create_style_information(doc, node); - if (!rules[name]) { - rules[name] = true; - stylesheet.insertRule(`@keyframes ${name} ${rule}`, stylesheet.cssRules.length); - } - const animation = node.style.animation || ""; - node.style.animation = `${animation ? `${animation}, ` : ""}${name} ${duration}ms linear ${delay2}ms 1 both`; - active += 1; - return name; -} -function delete_rule(node, name) { - const previous = (node.style.animation || "").split(", "); - const next = previous.filter( - name ? (anim) => anim.indexOf(name) < 0 : (anim) => anim.indexOf("__svelte") === -1 - // remove all Svelte animations - ); - const deleted = previous.length - next.length; - if (deleted) { - node.style.animation = next.join(", "); - active -= deleted; - if (!active) - clear_rules(); - } -} -function clear_rules() { - raf(() => { - if (active) - return; - managed_styles.forEach((info) => { - const { ownerNode } = info.stylesheet; - if (ownerNode) - detach(ownerNode); - }); - managed_styles.clear(); - }); -} - -// node_modules/.pnpm/svelte@4.2.10/node_modules/svelte/src/runtime/internal/await_block.js -init_polyfill_buffer(); - -// node_modules/.pnpm/svelte@4.2.10/node_modules/svelte/src/runtime/internal/transitions.js -init_polyfill_buffer(); - -// node_modules/.pnpm/svelte@4.2.10/node_modules/svelte/src/runtime/internal/scheduler.js -init_polyfill_buffer(); - -// node_modules/.pnpm/svelte@4.2.10/node_modules/svelte/src/runtime/internal/lifecycle.js -init_polyfill_buffer(); -var current_component; -function set_current_component(component) { - current_component = component; -} -function get_current_component() { - if (!current_component) - throw new Error("Function called outside component initialization"); - return current_component; -} -function onDestroy(fn) { - get_current_component().$$.on_destroy.push(fn); -} -function bubble(component, event) { - const callbacks = component.$$.callbacks[event.type]; - if (callbacks) { - callbacks.slice().forEach((fn) => fn.call(this, event)); - } -} - -// node_modules/.pnpm/svelte@4.2.10/node_modules/svelte/src/runtime/internal/scheduler.js -var dirty_components = []; -var binding_callbacks = []; -var render_callbacks = []; -var flush_callbacks = []; -var resolved_promise = /* @__PURE__ */ Promise.resolve(); -var update_scheduled = false; -function schedule_update() { - if (!update_scheduled) { - update_scheduled = true; - resolved_promise.then(flush); - } -} -function add_render_callback(fn) { - render_callbacks.push(fn); -} -var seen_callbacks = /* @__PURE__ */ new Set(); -var flushidx = 0; -function flush() { - if (flushidx !== 0) { - return; - } - const saved_component = current_component; - do { - try { - while (flushidx < dirty_components.length) { - const component = dirty_components[flushidx]; - flushidx++; - set_current_component(component); - update(component.$$); - } - } catch (e) { - dirty_components.length = 0; - flushidx = 0; - throw e; - } - set_current_component(null); - dirty_components.length = 0; - flushidx = 0; - while (binding_callbacks.length) - binding_callbacks.pop()(); - for (let i = 0; i < render_callbacks.length; i += 1) { - const callback = render_callbacks[i]; - if (!seen_callbacks.has(callback)) { - seen_callbacks.add(callback); - callback(); - } - } - render_callbacks.length = 0; - } while (dirty_components.length); - while (flush_callbacks.length) { - flush_callbacks.pop()(); - } - update_scheduled = false; - seen_callbacks.clear(); - set_current_component(saved_component); -} -function update($$) { - if ($$.fragment !== null) { - $$.update(); - run_all($$.before_update); - const dirty = $$.dirty; - $$.dirty = [-1]; - $$.fragment && $$.fragment.p($$.ctx, dirty); - $$.after_update.forEach(add_render_callback); - } -} -function flush_render_callbacks(fns) { - const filtered = []; - const targets = []; - render_callbacks.forEach((c) => fns.indexOf(c) === -1 ? filtered.push(c) : targets.push(c)); - targets.forEach((c) => c()); - render_callbacks = filtered; -} - -// node_modules/.pnpm/svelte@4.2.10/node_modules/svelte/src/runtime/internal/transitions.js -var promise; -function wait() { - if (!promise) { - promise = Promise.resolve(); - promise.then(() => { - promise = null; - }); - } - return promise; -} -function dispatch(node, direction, kind) { - node.dispatchEvent(custom_event(`${direction ? "intro" : "outro"}${kind}`)); -} -var outroing = /* @__PURE__ */ new Set(); -var outros; -function group_outros() { - outros = { - r: 0, - c: [], - p: outros - // parent group - }; -} -function check_outros() { - if (!outros.r) { - run_all(outros.c); - } - outros = outros.p; -} -function transition_in(block, local) { - if (block && block.i) { - outroing.delete(block); - block.i(local); - } -} -function transition_out(block, local, detach2, callback) { - if (block && block.o) { - if (outroing.has(block)) - return; - outroing.add(block); - outros.c.push(() => { - outroing.delete(block); - if (callback) { - if (detach2) - block.d(1); - callback(); - } - }); - block.o(local); - } else if (callback) { - callback(); - } -} -var null_transition = { duration: 0 }; -function create_bidirectional_transition(node, fn, params, intro) { - const options = { direction: "both" }; - let config = fn(node, params, options); - let t = intro ? 0 : 1; - let running_program = null; - let pending_program = null; - let animation_name = null; - let original_inert_value; - function clear_animation() { - if (animation_name) - delete_rule(node, animation_name); - } - function init3(program, duration) { - const d = ( - /** @type {Program['d']} */ - program.b - t - ); - duration *= Math.abs(d); - return { - a: t, - b: program.b, - d, - duration, - start: program.start, - end: program.start + duration, - group: program.group - }; - } - function go(b) { - const { - delay: delay2 = 0, - duration = 300, - easing = identity, - tick: tick2 = noop, - css - } = config || null_transition; - const program = { - start: now() + delay2, - b - }; - if (!b) { - program.group = outros; - outros.r += 1; - } - if ("inert" in node) { - if (b) { - if (original_inert_value !== void 0) { - node.inert = original_inert_value; - } - } else { - original_inert_value = /** @type {HTMLElement} */ - node.inert; - node.inert = true; - } - } - if (running_program || pending_program) { - pending_program = program; - } else { - if (css) { - clear_animation(); - animation_name = create_rule(node, t, b, duration, delay2, easing, css); - } - if (b) - tick2(0, 1); - running_program = init3(program, duration); - add_render_callback(() => dispatch(node, b, "start")); - loop((now2) => { - if (pending_program && now2 > pending_program.start) { - running_program = init3(pending_program, duration); - pending_program = null; - dispatch(node, running_program.b, "start"); - if (css) { - clear_animation(); - animation_name = create_rule( - node, - t, - running_program.b, - running_program.duration, - 0, - easing, - config.css - ); - } - } - if (running_program) { - if (now2 >= running_program.end) { - tick2(t = running_program.b, 1 - t); - dispatch(node, running_program.b, "end"); - if (!pending_program) { - if (running_program.b) { - clear_animation(); - } else { - if (!--running_program.group.r) - run_all(running_program.group.c); - } - } - running_program = null; - } else if (now2 >= running_program.start) { - const p = now2 - running_program.start; - t = running_program.a + running_program.d * easing(p / running_program.duration); - tick2(t, 1 - t); - } - } - return !!(running_program || pending_program); - }); - } - } - return { - run(b) { - if (is_function(config)) { - wait().then(() => { - const opts = { direction: b ? "in" : "out" }; - config = config(opts); - go(b); - }); - } else { - go(b); - } - }, - end() { - clear_animation(); - running_program = pending_program = null; - } - }; -} - -// node_modules/.pnpm/svelte@4.2.10/node_modules/svelte/src/runtime/internal/each.js -init_polyfill_buffer(); -function ensure_array_like(array_like_or_iterator) { - return (array_like_or_iterator == null ? void 0 : array_like_or_iterator.length) !== void 0 ? array_like_or_iterator : Array.from(array_like_or_iterator); -} - -// node_modules/.pnpm/svelte@4.2.10/node_modules/svelte/src/runtime/internal/spread.js -init_polyfill_buffer(); - -// node_modules/.pnpm/svelte@4.2.10/node_modules/svelte/src/runtime/internal/ssr.js -init_polyfill_buffer(); - -// node_modules/.pnpm/svelte@4.2.10/node_modules/svelte/src/shared/boolean_attributes.js -init_polyfill_buffer(); -var _boolean_attributes = ( - /** @type {const} */ - [ - "allowfullscreen", - "allowpaymentrequest", - "async", - "autofocus", - "autoplay", - "checked", - "controls", - "default", - "defer", - "disabled", - "formnovalidate", - "hidden", - "inert", - "ismap", - "loop", - "multiple", - "muted", - "nomodule", - "novalidate", - "open", - "playsinline", - "readonly", - "required", - "reversed", - "selected" - ] -); -var boolean_attributes = /* @__PURE__ */ new Set([..._boolean_attributes]); - -// node_modules/.pnpm/svelte@4.2.10/node_modules/svelte/src/shared/utils/names.js -init_polyfill_buffer(); - -// node_modules/.pnpm/svelte@4.2.10/node_modules/svelte/src/runtime/internal/Component.js -init_polyfill_buffer(); -function create_component(block) { - block && block.c(); -} -function mount_component(component, target, anchor) { - const { fragment, after_update } = component.$$; - fragment && fragment.m(target, anchor); - add_render_callback(() => { - const new_on_destroy = component.$$.on_mount.map(run).filter(is_function); - if (component.$$.on_destroy) { - component.$$.on_destroy.push(...new_on_destroy); - } else { - run_all(new_on_destroy); - } - component.$$.on_mount = []; - }); - after_update.forEach(add_render_callback); -} -function destroy_component(component, detaching) { - const $$ = component.$$; - if ($$.fragment !== null) { - flush_render_callbacks($$.after_update); - run_all($$.on_destroy); - $$.fragment && $$.fragment.d(detaching); - $$.on_destroy = $$.fragment = null; - $$.ctx = []; - } -} -function make_dirty(component, i) { - if (component.$$.dirty[0] === -1) { - dirty_components.push(component); - schedule_update(); - component.$$.dirty.fill(0); - } - component.$$.dirty[i / 31 | 0] |= 1 << i % 31; -} -function init2(component, options, instance10, create_fragment10, not_equal, props, append_styles2 = null, dirty = [-1]) { - const parent_component = current_component; - set_current_component(component); - const $$ = component.$$ = { - fragment: null, - ctx: [], - // state - props, - update: noop, - not_equal, - bound: blank_object(), - // lifecycle - on_mount: [], - on_destroy: [], - on_disconnect: [], - before_update: [], - after_update: [], - context: new Map(options.context || (parent_component ? parent_component.$$.context : [])), - // everything else - callbacks: blank_object(), - dirty, - skip_bound: false, - root: options.target || parent_component.$$.root - }; - append_styles2 && append_styles2($$.root); - let ready = false; - $$.ctx = instance10 ? instance10(component, options.props || {}, (i, ret, ...rest) => { - const value = rest.length ? rest[0] : ret; - if ($$.ctx && not_equal($$.ctx[i], $$.ctx[i] = value)) { - if (!$$.skip_bound && $$.bound[i]) - $$.bound[i](value); - if (ready) - make_dirty(component, i); - } - return ret; - }) : []; - $$.update(); - ready = true; - run_all($$.before_update); - $$.fragment = create_fragment10 ? create_fragment10($$.ctx) : false; - if (options.target) { - if (options.hydrate) { - start_hydrating(); - const nodes = children(options.target); - $$.fragment && $$.fragment.l(nodes); - nodes.forEach(detach); - } else { - $$.fragment && $$.fragment.c(); - } - if (options.intro) - transition_in(component.$$.fragment); - mount_component(component, options.target, options.anchor); - end_hydrating(); - flush(); - } - set_current_component(parent_component); -} -var SvelteElement; -if (typeof HTMLElement === "function") { - SvelteElement = class extends HTMLElement { - constructor($$componentCtor, $$slots, use_shadow_dom) { - super(); - /** The Svelte component constructor */ - __publicField(this, "$$ctor"); - /** Slots */ - __publicField(this, "$$s"); - /** The Svelte component instance */ - __publicField(this, "$$c"); - /** Whether or not the custom element is connected */ - __publicField(this, "$$cn", false); - /** Component props data */ - __publicField(this, "$$d", {}); - /** `true` if currently in the process of reflecting component props back to attributes */ - __publicField(this, "$$r", false); - /** @type {Record} Props definition (name, reflected, type etc) */ - __publicField(this, "$$p_d", {}); - /** @type {Record} Event listeners */ - __publicField(this, "$$l", {}); - /** @type {Map} Event listener unsubscribe functions */ - __publicField(this, "$$l_u", /* @__PURE__ */ new Map()); - this.$$ctor = $$componentCtor; - this.$$s = $$slots; - if (use_shadow_dom) { - this.attachShadow({ mode: "open" }); - } - } - addEventListener(type, listener, options) { - this.$$l[type] = this.$$l[type] || []; - this.$$l[type].push(listener); - if (this.$$c) { - const unsub = this.$$c.$on(type, listener); - this.$$l_u.set(listener, unsub); - } - super.addEventListener(type, listener, options); - } - removeEventListener(type, listener, options) { - super.removeEventListener(type, listener, options); - if (this.$$c) { - const unsub = this.$$l_u.get(listener); - if (unsub) { - unsub(); - this.$$l_u.delete(listener); - } - } - } - async connectedCallback() { - this.$$cn = true; - if (!this.$$c) { - let create_slot = function(name) { - return () => { - let node; - const obj = { - c: function create() { - node = element("slot"); - if (name !== "default") { - attr(node, "name", name); - } - }, - /** - * @param {HTMLElement} target - * @param {HTMLElement} [anchor] - */ - m: function mount(target, anchor) { - insert(target, node, anchor); - }, - d: function destroy(detaching) { - if (detaching) { - detach(node); - } - } - }; - return obj; - }; - }; - await Promise.resolve(); - if (!this.$$cn) { - return; - } - const $$slots = {}; - const existing_slots = get_custom_elements_slots(this); - for (const name of this.$$s) { - if (name in existing_slots) { - $$slots[name] = [create_slot(name)]; - } - } - for (const attribute of this.attributes) { - const name = this.$$g_p(attribute.name); - if (!(name in this.$$d)) { - this.$$d[name] = get_custom_element_value(name, attribute.value, this.$$p_d, "toProp"); - } - } - for (const key2 in this.$$p_d) { - if (!(key2 in this.$$d) && this[key2] !== void 0) { - this.$$d[key2] = this[key2]; - delete this[key2]; - } - } - this.$$c = new this.$$ctor({ - target: this.shadowRoot || this, - props: { - ...this.$$d, - $$slots, - $$scope: { - ctx: [] - } - } - }); - const reflect_attributes = () => { - this.$$r = true; - for (const key2 in this.$$p_d) { - this.$$d[key2] = this.$$c.$$.ctx[this.$$c.$$.props[key2]]; - if (this.$$p_d[key2].reflect) { - const attribute_value = get_custom_element_value( - key2, - this.$$d[key2], - this.$$p_d, - "toAttribute" - ); - if (attribute_value == null) { - this.removeAttribute(this.$$p_d[key2].attribute || key2); - } else { - this.setAttribute(this.$$p_d[key2].attribute || key2, attribute_value); - } - } - } - this.$$r = false; - }; - this.$$c.$$.after_update.push(reflect_attributes); - reflect_attributes(); - for (const type in this.$$l) { - for (const listener of this.$$l[type]) { - const unsub = this.$$c.$on(type, listener); - this.$$l_u.set(listener, unsub); - } - } - this.$$l = {}; - } - } - // We don't need this when working within Svelte code, but for compatibility of people using this outside of Svelte - // and setting attributes through setAttribute etc, this is helpful - attributeChangedCallback(attr2, _oldValue, newValue) { - var _a2; - if (this.$$r) - return; - attr2 = this.$$g_p(attr2); - this.$$d[attr2] = get_custom_element_value(attr2, newValue, this.$$p_d, "toProp"); - (_a2 = this.$$c) == null ? void 0 : _a2.$set({ [attr2]: this.$$d[attr2] }); - } - disconnectedCallback() { - this.$$cn = false; - Promise.resolve().then(() => { - if (!this.$$cn) { - this.$$c.$destroy(); - this.$$c = void 0; - } - }); - } - $$g_p(attribute_name) { - return Object.keys(this.$$p_d).find( - (key2) => this.$$p_d[key2].attribute === attribute_name || !this.$$p_d[key2].attribute && key2.toLowerCase() === attribute_name - ) || attribute_name; - } - }; -} -function get_custom_element_value(prop, value, props_definition, transform) { - var _a2; - const type = (_a2 = props_definition[prop]) == null ? void 0 : _a2.type; - value = type === "Boolean" && typeof value !== "boolean" ? value != null : value; - if (!transform || !props_definition[prop]) { - return value; - } else if (transform === "toAttribute") { - switch (type) { - case "Object": - case "Array": - return value == null ? null : JSON.stringify(value); - case "Boolean": - return value ? "" : null; - case "Number": - return value == null ? null : value; - default: - return value; - } - } else { - switch (type) { - case "Object": - case "Array": - return value && JSON.parse(value); - case "Boolean": - return value; - case "Number": - return value != null ? +value : value; - default: - return value; - } - } -} -var SvelteComponent = class { - constructor() { - /** - * ### PRIVATE API - * - * Do not use, may change at any time - * - * @type {any} - */ - __publicField(this, "$$"); - /** - * ### PRIVATE API - * - * Do not use, may change at any time - * - * @type {any} - */ - __publicField(this, "$$set"); - } - /** @returns {void} */ - $destroy() { - destroy_component(this, 1); - this.$destroy = noop; - } - /** - * @template {Extract} K - * @param {K} type - * @param {((e: Events[K]) => void) | null | undefined} callback - * @returns {() => void} - */ - $on(type, callback) { - if (!is_function(callback)) { - return noop; - } - const callbacks = this.$$.callbacks[type] || (this.$$.callbacks[type] = []); - callbacks.push(callback); - return () => { - const index2 = callbacks.indexOf(callback); - if (index2 !== -1) - callbacks.splice(index2, 1); - }; - } - /** - * @param {Partial} props - * @returns {void} - */ - $set(props) { - if (this.$$set && !is_empty(props)) { - this.$$.skip_bound = true; - this.$$set(props); - this.$$.skip_bound = false; - } - } -}; - -// node_modules/.pnpm/svelte@4.2.10/node_modules/svelte/src/runtime/internal/dev.js -init_polyfill_buffer(); - -// node_modules/.pnpm/svelte@4.2.10/node_modules/svelte/src/shared/version.js -init_polyfill_buffer(); -var PUBLIC_VERSION = "4"; - -// node_modules/.pnpm/svelte@4.2.10/node_modules/svelte/src/runtime/internal/disclose-version/index.js -init_polyfill_buffer(); -if (typeof window !== "undefined") - (window.__svelte || (window.__svelte = { v: /* @__PURE__ */ new Set() })).v.add(PUBLIC_VERSION); - -// node_modules/.pnpm/tslib@2.6.2/node_modules/tslib/tslib.es6.mjs -init_polyfill_buffer(); -function __awaiter(thisArg, _arguments, P, generator) { - function adopt(value) { - return value instanceof P ? value : new P(function(resolve) { - resolve(value); - }); - } - return new (P || (P = Promise))(function(resolve, reject) { - function fulfilled(value) { - try { - step(generator.next(value)); - } catch (e) { - reject(e); - } - } - function rejected(value) { - try { - step(generator["throw"](value)); - } catch (e) { - reject(e); - } - } - function step(result) { - result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); - } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -} - -// src/ui/history/historyView.svelte -var import_obsidian20 = require("obsidian"); - -// node_modules/.pnpm/svelte@4.2.10/node_modules/svelte/src/runtime/index.js -init_polyfill_buffer(); - -// src/ui/history/components/logComponent.svelte -init_polyfill_buffer(); -var import_obsidian19 = require("obsidian"); - -// node_modules/.pnpm/svelte@4.2.10/node_modules/svelte/src/runtime/transition/index.js -init_polyfill_buffer(); - -// node_modules/.pnpm/svelte@4.2.10/node_modules/svelte/src/runtime/easing/index.js -init_polyfill_buffer(); -function cubicOut(t) { - const f = t - 1; - return f * f * f + 1; -} - -// node_modules/.pnpm/svelte@4.2.10/node_modules/svelte/src/runtime/transition/index.js -function slide(node, { delay: delay2 = 0, duration = 400, easing = cubicOut, axis = "y" } = {}) { - const style = getComputedStyle(node); - const opacity = +style.opacity; - const primary_property = axis === "y" ? "height" : "width"; - const primary_property_value = parseFloat(style[primary_property]); - const secondary_properties = axis === "y" ? ["top", "bottom"] : ["left", "right"]; - const capitalized_secondary_properties = secondary_properties.map( - (e) => `${e[0].toUpperCase()}${e.slice(1)}` - ); - const padding_start_value = parseFloat(style[`padding${capitalized_secondary_properties[0]}`]); - const padding_end_value = parseFloat(style[`padding${capitalized_secondary_properties[1]}`]); - const margin_start_value = parseFloat(style[`margin${capitalized_secondary_properties[0]}`]); - const margin_end_value = parseFloat(style[`margin${capitalized_secondary_properties[1]}`]); - const border_width_start_value = parseFloat( - style[`border${capitalized_secondary_properties[0]}Width`] - ); - const border_width_end_value = parseFloat( - style[`border${capitalized_secondary_properties[1]}Width`] - ); - return { - delay: delay2, - duration, - easing, - css: (t) => `overflow: hidden;opacity: ${Math.min(t * 20, 1) * opacity};${primary_property}: ${t * primary_property_value}px;padding-${secondary_properties[0]}: ${t * padding_start_value}px;padding-${secondary_properties[1]}: ${t * padding_end_value}px;margin-${secondary_properties[0]}: ${t * margin_start_value}px;margin-${secondary_properties[1]}: ${t * margin_end_value}px;border-${secondary_properties[0]}-width: ${t * border_width_start_value}px;border-${secondary_properties[1]}-width: ${t * border_width_end_value}px;` - }; -} - -// src/ui/history/components/logFileComponent.svelte -init_polyfill_buffer(); -var import_obsidian18 = require("obsidian"); -function add_css(target) { - append_styles(target, "svelte-1wbh8tp", "main.svelte-1wbh8tp .nav-file-title.svelte-1wbh8tp{align-items:center}"); -} -function create_if_block(ctx) { - let div; - let mounted; - let dispose; - return { - c() { - div = element("div"); - attr(div, "data-icon", "go-to-file"); - attr(div, "aria-label", "Open File"); - attr(div, "class", "clickable-icon"); - }, - m(target, anchor) { - insert(target, div, anchor); - ctx[7](div); - if (!mounted) { - dispose = [ - listen(div, "auxclick", stop_propagation( - /*open*/ - ctx[4] - )), - listen(div, "click", stop_propagation( - /*open*/ - ctx[4] - )) - ]; - mounted = true; - } - }, - p: noop, - d(detaching) { - if (detaching) { - detach(div); - } - ctx[7](null); - mounted = false; - run_all(dispose); - } - }; -} -function create_fragment(ctx) { - let main; - let div3; - let div0; - let t0_value = getDisplayPath( - /*diff*/ - ctx[0].vault_path - ) + ""; - let t0; - let t1; - let div2; - let div1; - let show_if = ( - /*view*/ - ctx[1].app.vault.getAbstractFileByPath( - /*diff*/ - ctx[0].vault_path - ) - ); - let t2; - let span; - let t3_value = ( - /*diff*/ - ctx[0].status + "" - ); - let t3; - let span_data_type_value; - let div3_data_path_value; - let div3_aria_label_value; - let mounted; - let dispose; - let if_block = show_if && create_if_block(ctx); - return { - c() { - var _a2, _b; - main = element("main"); - div3 = element("div"); - div0 = element("div"); - t0 = text(t0_value); - t1 = space(); - div2 = element("div"); - div1 = element("div"); - if (if_block) - if_block.c(); - t2 = space(); - span = element("span"); - t3 = text(t3_value); - attr(div0, "class", "tree-item-inner nav-file-title-content"); - attr(div1, "class", "buttons"); - attr(span, "class", "type"); - attr(span, "data-type", span_data_type_value = /*diff*/ - ctx[0].status); - attr(div2, "class", "git-tools"); - attr(div3, "class", "tree-item-self is-clickable nav-file-title svelte-1wbh8tp"); - attr(div3, "data-path", div3_data_path_value = /*diff*/ - ctx[0].vault_path); - attr( - div3, - "data-tooltip-position", - /*side*/ - ctx[3] - ); - attr(div3, "aria-label", div3_aria_label_value = /*diff*/ - ctx[0].vault_path); - toggle_class( - div3, - "is-active", - /*view*/ - ((_a2 = ctx[1].plugin.lastDiffViewState) == null ? void 0 : _a2.file) == /*diff*/ - ctx[0].vault_path && /*view*/ - ((_b = ctx[1].plugin.lastDiffViewState) == null ? void 0 : _b.hash) - ); - attr(main, "class", "tree-item nav-file svelte-1wbh8tp"); - }, - m(target, anchor) { - insert(target, main, anchor); - append2(main, div3); - append2(div3, div0); - append2(div0, t0); - append2(div3, t1); - append2(div3, div2); - append2(div2, div1); - if (if_block) - if_block.m(div1, null); - append2(div2, t2); - append2(div2, span); - append2(span, t3); - if (!mounted) { - dispose = [ - listen(main, "click", stop_propagation( - /*showDiff*/ - ctx[5] - )), - listen(main, "auxclick", stop_propagation( - /*showDiff*/ - ctx[5] - )), - listen( - main, - "focus", - /*focus_handler*/ - ctx[6] - ) - ]; - mounted = true; - } - }, - p(ctx2, [dirty]) { - var _a2, _b; - if (dirty & /*diff*/ - 1 && t0_value !== (t0_value = getDisplayPath( - /*diff*/ - ctx2[0].vault_path - ) + "")) - set_data(t0, t0_value); - if (dirty & /*view, diff*/ - 3) - show_if = /*view*/ - ctx2[1].app.vault.getAbstractFileByPath( - /*diff*/ - ctx2[0].vault_path - ); - if (show_if) { - if (if_block) { - if_block.p(ctx2, dirty); - } else { - if_block = create_if_block(ctx2); - if_block.c(); - if_block.m(div1, null); - } - } else if (if_block) { - if_block.d(1); - if_block = null; - } - if (dirty & /*diff*/ - 1 && t3_value !== (t3_value = /*diff*/ - ctx2[0].status + "")) - set_data(t3, t3_value); - if (dirty & /*diff*/ - 1 && span_data_type_value !== (span_data_type_value = /*diff*/ - ctx2[0].status)) { - attr(span, "data-type", span_data_type_value); - } - if (dirty & /*diff*/ - 1 && div3_data_path_value !== (div3_data_path_value = /*diff*/ - ctx2[0].vault_path)) { - attr(div3, "data-path", div3_data_path_value); - } - if (dirty & /*side*/ - 8) { - attr( - div3, - "data-tooltip-position", - /*side*/ - ctx2[3] - ); - } - if (dirty & /*diff*/ - 1 && div3_aria_label_value !== (div3_aria_label_value = /*diff*/ - ctx2[0].vault_path)) { - attr(div3, "aria-label", div3_aria_label_value); - } - if (dirty & /*view, diff*/ - 3) { - toggle_class( - div3, - "is-active", - /*view*/ - ((_a2 = ctx2[1].plugin.lastDiffViewState) == null ? void 0 : _a2.file) == /*diff*/ - ctx2[0].vault_path && /*view*/ - ((_b = ctx2[1].plugin.lastDiffViewState) == null ? void 0 : _b.hash) - ); - } - }, - i: noop, - o: noop, - d(detaching) { - if (detaching) { - detach(main); - } - if (if_block) - if_block.d(); - mounted = false; - run_all(dispose); - } - }; -} -function instance($$self, $$props, $$invalidate) { - let side; - let { diff: diff3 } = $$props; - let { view } = $$props; - let buttons = []; - window.setTimeout(() => buttons.forEach((b) => (0, import_obsidian18.setIcon)(b, b.getAttr("data-icon"))), 0); - function open(event) { - var _a2; - const file = view.app.vault.getAbstractFileByPath(diff3.vault_path); - if (file instanceof import_obsidian18.TFile) { - (_a2 = getNewLeaf(event)) === null || _a2 === void 0 ? void 0 : _a2.openFile(file); - } - } - function showDiff(event) { - var _a2; - (_a2 = getNewLeaf(event)) === null || _a2 === void 0 ? void 0 : _a2.setViewState({ - type: DIFF_VIEW_CONFIG.type, - active: true, - state: { - file: diff3.path, - staged: false, - hash: diff3.hash - } - }); - } - function focus_handler(event) { - bubble.call(this, $$self, event); - } - function div_binding($$value) { - binding_callbacks[$$value ? "unshift" : "push"](() => { - buttons[0] = $$value; - $$invalidate(2, buttons); - }); - } - $$self.$$set = ($$props2) => { - if ("diff" in $$props2) - $$invalidate(0, diff3 = $$props2.diff); - if ("view" in $$props2) - $$invalidate(1, view = $$props2.view); - }; - $$self.$$.update = () => { - if ($$self.$$.dirty & /*view*/ - 2) { - $: - $$invalidate(3, side = view.leaf.getRoot().side == "left" ? "right" : "left"); - } - }; - return [diff3, view, buttons, side, open, showDiff, focus_handler, div_binding]; -} -var LogFileComponent = class extends SvelteComponent { - constructor(options) { - super(); - init2(this, options, instance, create_fragment, safe_not_equal, { diff: 0, view: 1 }, add_css); - } -}; -var logFileComponent_default = LogFileComponent; - -// src/ui/history/components/logTreeComponent.svelte -init_polyfill_buffer(); -function add_css2(target) { - append_styles(target, "svelte-1lnl15d", "main.svelte-1lnl15d .nav-folder-title-content.svelte-1lnl15d{display:flex;align-items:center}"); -} -function get_each_context(ctx, list, i) { - const child_ctx = ctx.slice(); - child_ctx[8] = list[i]; - return child_ctx; -} -function create_else_block(ctx) { - let div4; - let div3; - let div0; - let t0; - let div1; - let t1; - let div2; - let t2_value = ( - /*entity*/ - ctx[8].title + "" - ); - let t2; - let div3_aria_label_value; - let t3; - let t4; - let current; - let mounted; - let dispose; - function click_handler() { - return ( - /*click_handler*/ - ctx[7]( - /*entity*/ - ctx[8] - ) - ); - } - let if_block = !/*closed*/ - ctx[4][ - /*entity*/ - ctx[8].title - ] && create_if_block_1(ctx); - return { - c() { - div4 = element("div"); - div3 = element("div"); - div0 = element("div"); - t0 = space(); - div1 = element("div"); - div1.innerHTML = ``; - t1 = space(); - div2 = element("div"); - t2 = text(t2_value); - t3 = space(); - if (if_block) - if_block.c(); - t4 = space(); - attr(div0, "data-icon", "folder"); - set_style(div0, "padding-right", "5px"); - set_style(div0, "display", "flex"); - attr(div1, "class", "tree-item-icon nav-folder-collapse-indicator collapse-icon"); - toggle_class( - div1, - "is-collapsed", - /*closed*/ - ctx[4][ - /*entity*/ - ctx[8].title - ] - ); - attr(div2, "class", "tree-item-inner nav-folder-title-content svelte-1lnl15d"); - attr(div3, "class", "tree-item-self is-clickable nav-folder-title"); - attr( - div3, - "data-tooltip-position", - /*side*/ - ctx[5] - ); - attr(div3, "aria-label", div3_aria_label_value = /*entity*/ - ctx[8].vaultPath); - attr(div4, "class", "tree-item nav-folder"); - toggle_class( - div4, - "is-collapsed", - /*closed*/ - ctx[4][ - /*entity*/ - ctx[8].title - ] - ); - }, - m(target, anchor) { - insert(target, div4, anchor); - append2(div4, div3); - append2(div3, div0); - append2(div3, t0); - append2(div3, div1); - append2(div3, t1); - append2(div3, div2); - append2(div2, t2); - append2(div4, t3); - if (if_block) - if_block.m(div4, null); - append2(div4, t4); - current = true; - if (!mounted) { - dispose = listen(div3, "click", click_handler); - mounted = true; - } - }, - p(new_ctx, dirty) { - ctx = new_ctx; - if (!current || dirty & /*closed, hierarchy*/ - 17) { - toggle_class( - div1, - "is-collapsed", - /*closed*/ - ctx[4][ - /*entity*/ - ctx[8].title - ] - ); - } - if ((!current || dirty & /*hierarchy*/ - 1) && t2_value !== (t2_value = /*entity*/ - ctx[8].title + "")) - set_data(t2, t2_value); - if (!current || dirty & /*side*/ - 32) { - attr( - div3, - "data-tooltip-position", - /*side*/ - ctx[5] - ); - } - if (!current || dirty & /*hierarchy*/ - 1 && div3_aria_label_value !== (div3_aria_label_value = /*entity*/ - ctx[8].vaultPath)) { - attr(div3, "aria-label", div3_aria_label_value); - } - if (!/*closed*/ - ctx[4][ - /*entity*/ - ctx[8].title - ]) { - if (if_block) { - if_block.p(ctx, dirty); - if (dirty & /*closed, hierarchy*/ - 17) { - transition_in(if_block, 1); - } - } else { - if_block = create_if_block_1(ctx); - if_block.c(); - transition_in(if_block, 1); - if_block.m(div4, t4); - } - } else if (if_block) { - group_outros(); - transition_out(if_block, 1, 1, () => { - if_block = null; - }); - check_outros(); - } - if (!current || dirty & /*closed, hierarchy*/ - 17) { - toggle_class( - div4, - "is-collapsed", - /*closed*/ - ctx[4][ - /*entity*/ - ctx[8].title - ] - ); - } - }, - i(local) { - if (current) - return; - transition_in(if_block); - current = true; - }, - o(local) { - transition_out(if_block); - current = false; - }, - d(detaching) { - if (detaching) { - detach(div4); - } - if (if_block) - if_block.d(); - mounted = false; - dispose(); - } - }; -} -function create_if_block2(ctx) { - let div; - let logfilecomponent; - let t; - let current; - logfilecomponent = new logFileComponent_default({ - props: { - diff: ( - /*entity*/ - ctx[8].data - ), - view: ( - /*view*/ - ctx[2] - ) - } - }); - return { - c() { - div = element("div"); - create_component(logfilecomponent.$$.fragment); - t = space(); - }, - m(target, anchor) { - insert(target, div, anchor); - mount_component(logfilecomponent, div, null); - append2(div, t); - current = true; - }, - p(ctx2, dirty) { - const logfilecomponent_changes = {}; - if (dirty & /*hierarchy*/ - 1) - logfilecomponent_changes.diff = /*entity*/ - ctx2[8].data; - if (dirty & /*view*/ - 4) - logfilecomponent_changes.view = /*view*/ - ctx2[2]; - logfilecomponent.$set(logfilecomponent_changes); - }, - i(local) { - if (current) - return; - transition_in(logfilecomponent.$$.fragment, local); - current = true; - }, - o(local) { - transition_out(logfilecomponent.$$.fragment, local); - current = false; - }, - d(detaching) { - if (detaching) { - detach(div); - } - destroy_component(logfilecomponent); - } - }; -} -function create_if_block_1(ctx) { - let div; - let logtreecomponent; - let div_transition; - let current; - logtreecomponent = new LogTreeComponent({ - props: { - hierarchy: ( - /*entity*/ - ctx[8] - ), - plugin: ( - /*plugin*/ - ctx[1] - ), - view: ( - /*view*/ - ctx[2] - ) - } - }); - return { - c() { - div = element("div"); - create_component(logtreecomponent.$$.fragment); - attr(div, "class", "tree-item-children nav-folder-children"); - }, - m(target, anchor) { - insert(target, div, anchor); - mount_component(logtreecomponent, div, null); - current = true; - }, - p(ctx2, dirty) { - const logtreecomponent_changes = {}; - if (dirty & /*hierarchy*/ - 1) - logtreecomponent_changes.hierarchy = /*entity*/ - ctx2[8]; - if (dirty & /*plugin*/ - 2) - logtreecomponent_changes.plugin = /*plugin*/ - ctx2[1]; - if (dirty & /*view*/ - 4) - logtreecomponent_changes.view = /*view*/ - ctx2[2]; - logtreecomponent.$set(logtreecomponent_changes); - }, - i(local) { - if (current) - return; - transition_in(logtreecomponent.$$.fragment, local); - if (local) { - add_render_callback(() => { - if (!current) - return; - if (!div_transition) - div_transition = create_bidirectional_transition(div, slide, { duration: 150 }, true); - div_transition.run(1); - }); - } - current = true; - }, - o(local) { - transition_out(logtreecomponent.$$.fragment, local); - if (local) { - if (!div_transition) - div_transition = create_bidirectional_transition(div, slide, { duration: 150 }, false); - div_transition.run(0); - } - current = false; - }, - d(detaching) { - if (detaching) { - detach(div); - } - destroy_component(logtreecomponent); - if (detaching && div_transition) - div_transition.end(); - } - }; -} -function create_each_block(ctx) { - let current_block_type_index; - let if_block; - let if_block_anchor; - let current; - const if_block_creators = [create_if_block2, create_else_block]; - const if_blocks = []; - function select_block_type(ctx2, dirty) { - if ( - /*entity*/ - ctx2[8].data - ) - return 0; - return 1; - } - current_block_type_index = select_block_type(ctx, -1); - if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx); - return { - c() { - if_block.c(); - if_block_anchor = empty(); - }, - m(target, anchor) { - if_blocks[current_block_type_index].m(target, anchor); - insert(target, if_block_anchor, anchor); - current = true; - }, - p(ctx2, dirty) { - let previous_block_index = current_block_type_index; - current_block_type_index = select_block_type(ctx2, dirty); - if (current_block_type_index === previous_block_index) { - if_blocks[current_block_type_index].p(ctx2, dirty); - } else { - group_outros(); - transition_out(if_blocks[previous_block_index], 1, 1, () => { - if_blocks[previous_block_index] = null; - }); - check_outros(); - if_block = if_blocks[current_block_type_index]; - if (!if_block) { - if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx2); - if_block.c(); - } else { - if_block.p(ctx2, dirty); - } - transition_in(if_block, 1); - if_block.m(if_block_anchor.parentNode, if_block_anchor); - } - }, - i(local) { - if (current) - return; - transition_in(if_block); - current = true; - }, - o(local) { - transition_out(if_block); - current = false; - }, - d(detaching) { - if (detaching) { - detach(if_block_anchor); - } - if_blocks[current_block_type_index].d(detaching); - } - }; -} -function create_fragment2(ctx) { - let main; - let current; - let each_value = ensure_array_like( - /*hierarchy*/ - ctx[0].children - ); - let each_blocks = []; - for (let i = 0; i < each_value.length; i += 1) { - each_blocks[i] = create_each_block(get_each_context(ctx, each_value, i)); - } - const out = (i) => transition_out(each_blocks[i], 1, 1, () => { - each_blocks[i] = null; - }); - return { - c() { - main = element("main"); - for (let i = 0; i < each_blocks.length; i += 1) { - each_blocks[i].c(); - } - attr(main, "class", "svelte-1lnl15d"); - toggle_class( - main, - "topLevel", - /*topLevel*/ - ctx[3] - ); - }, - m(target, anchor) { - insert(target, main, anchor); - for (let i = 0; i < each_blocks.length; i += 1) { - if (each_blocks[i]) { - each_blocks[i].m(main, null); - } - } - current = true; - }, - p(ctx2, [dirty]) { - if (dirty & /*hierarchy, view, closed, plugin, side, fold*/ - 119) { - each_value = ensure_array_like( - /*hierarchy*/ - ctx2[0].children - ); - let i; - for (i = 0; i < each_value.length; i += 1) { - const child_ctx = get_each_context(ctx2, each_value, i); - if (each_blocks[i]) { - each_blocks[i].p(child_ctx, dirty); - transition_in(each_blocks[i], 1); - } else { - each_blocks[i] = create_each_block(child_ctx); - each_blocks[i].c(); - transition_in(each_blocks[i], 1); - each_blocks[i].m(main, null); - } - } - group_outros(); - for (i = each_value.length; i < each_blocks.length; i += 1) { - out(i); - } - check_outros(); - } - if (!current || dirty & /*topLevel*/ - 8) { - toggle_class( - main, - "topLevel", - /*topLevel*/ - ctx2[3] - ); - } - }, - i(local) { - if (current) - return; - for (let i = 0; i < each_value.length; i += 1) { - transition_in(each_blocks[i]); - } - current = true; - }, - o(local) { - each_blocks = each_blocks.filter(Boolean); - for (let i = 0; i < each_blocks.length; i += 1) { - transition_out(each_blocks[i]); - } - current = false; - }, - d(detaching) { - if (detaching) { - detach(main); - } - destroy_each(each_blocks, detaching); - } - }; -} -function instance2($$self, $$props, $$invalidate) { - let side; - let { hierarchy } = $$props; - let { plugin } = $$props; - let { view } = $$props; - let { topLevel = false } = $$props; - const closed = {}; - function fold(item) { - $$invalidate(4, closed[item.title] = !closed[item.title], closed); - } - const click_handler = (entity) => fold(entity); - $$self.$$set = ($$props2) => { - if ("hierarchy" in $$props2) - $$invalidate(0, hierarchy = $$props2.hierarchy); - if ("plugin" in $$props2) - $$invalidate(1, plugin = $$props2.plugin); - if ("view" in $$props2) - $$invalidate(2, view = $$props2.view); - if ("topLevel" in $$props2) - $$invalidate(3, topLevel = $$props2.topLevel); - }; - $$self.$$.update = () => { - if ($$self.$$.dirty & /*view*/ - 4) { - $: - $$invalidate(5, side = view.leaf.getRoot().side == "left" ? "right" : "left"); - } - }; - return [hierarchy, plugin, view, topLevel, closed, side, fold, click_handler]; -} -var LogTreeComponent = class extends SvelteComponent { - constructor(options) { - super(); - init2( - this, - options, - instance2, - create_fragment2, - safe_not_equal, - { - hierarchy: 0, - plugin: 1, - view: 2, - topLevel: 3 - }, - add_css2 - ); - } -}; -var logTreeComponent_default = LogTreeComponent; - -// src/ui/history/components/logComponent.svelte -function get_each_context2(ctx, list, i) { - const child_ctx = ctx.slice(); - child_ctx[9] = list[i]; - return child_ctx; -} -function create_if_block_4(ctx) { - let div; - let t_value = ( - /*log*/ - ctx[0].refs.join(", ") + "" - ); - let t; - return { - c() { - div = element("div"); - t = text(t_value); - attr(div, "class", "git-ref"); - }, - m(target, anchor) { - insert(target, div, anchor); - append2(div, t); - }, - p(ctx2, dirty) { - if (dirty & /*log*/ - 1 && t_value !== (t_value = /*log*/ - ctx2[0].refs.join(", ") + "")) - set_data(t, t_value); - }, - d(detaching) { - if (detaching) { - detach(div); - } - } - }; -} -function create_if_block_3(ctx) { - let div; - let t_value = ( - /*authorToString*/ - ctx[7]( - /*log*/ - ctx[0] - ) + "" - ); - let t; - return { - c() { - div = element("div"); - t = text(t_value); - attr(div, "class", "git-author"); - }, - m(target, anchor) { - insert(target, div, anchor); - append2(div, t); - }, - p(ctx2, dirty) { - if (dirty & /*log*/ - 1 && t_value !== (t_value = /*authorToString*/ - ctx2[7]( - /*log*/ - ctx2[0] - ) + "")) - set_data(t, t_value); - }, - d(detaching) { - if (detaching) { - detach(div); - } - } - }; -} -function create_if_block_2(ctx) { - let div; - let t_value = (0, import_obsidian19.moment)( - /*log*/ - ctx[0].date - ).format( - /*plugin*/ - ctx[3].settings.commitDateFormat - ) + ""; - let t; - return { - c() { - div = element("div"); - t = text(t_value); - attr(div, "class", "git-date"); - }, - m(target, anchor) { - insert(target, div, anchor); - append2(div, t); - }, - p(ctx2, dirty) { - if (dirty & /*log, plugin*/ - 9 && t_value !== (t_value = (0, import_obsidian19.moment)( - /*log*/ - ctx2[0].date - ).format( - /*plugin*/ - ctx2[3].settings.commitDateFormat - ) + "")) - set_data(t, t_value); - }, - d(detaching) { - if (detaching) { - detach(div); - } - } - }; -} -function create_if_block3(ctx) { - let div; - let current_block_type_index; - let if_block; - let div_transition; - let current; - const if_block_creators = [create_if_block_12, create_else_block2]; - const if_blocks = []; - function select_block_type(ctx2, dirty) { - if ( - /*showTree*/ - ctx2[2] - ) - return 0; - return 1; - } - current_block_type_index = select_block_type(ctx, -1); - if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx); - return { - c() { - div = element("div"); - if_block.c(); - attr(div, "class", "tree-item-children nav-folder-children"); - }, - m(target, anchor) { - insert(target, div, anchor); - if_blocks[current_block_type_index].m(div, null); - current = true; - }, - p(ctx2, dirty) { - let previous_block_index = current_block_type_index; - current_block_type_index = select_block_type(ctx2, dirty); - if (current_block_type_index === previous_block_index) { - if_blocks[current_block_type_index].p(ctx2, dirty); - } else { - group_outros(); - transition_out(if_blocks[previous_block_index], 1, 1, () => { - if_blocks[previous_block_index] = null; - }); - check_outros(); - if_block = if_blocks[current_block_type_index]; - if (!if_block) { - if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx2); - if_block.c(); - } else { - if_block.p(ctx2, dirty); - } - transition_in(if_block, 1); - if_block.m(div, null); - } - }, - i(local) { - if (current) - return; - transition_in(if_block); - if (local) { - add_render_callback(() => { - if (!current) - return; - if (!div_transition) - div_transition = create_bidirectional_transition(div, slide, { duration: 150 }, true); - div_transition.run(1); - }); - } - current = true; - }, - o(local) { - transition_out(if_block); - if (local) { - if (!div_transition) - div_transition = create_bidirectional_transition(div, slide, { duration: 150 }, false); - div_transition.run(0); - } - current = false; - }, - d(detaching) { - if (detaching) { - detach(div); - } - if_blocks[current_block_type_index].d(); - if (detaching && div_transition) - div_transition.end(); - } - }; -} -function create_else_block2(ctx) { - let each_1_anchor; - let current; - let each_value = ensure_array_like( - /*log*/ - ctx[0].diff.files - ); - let each_blocks = []; - for (let i = 0; i < each_value.length; i += 1) { - each_blocks[i] = create_each_block2(get_each_context2(ctx, each_value, i)); - } - const out = (i) => transition_out(each_blocks[i], 1, 1, () => { - each_blocks[i] = null; - }); - return { - c() { - for (let i = 0; i < each_blocks.length; i += 1) { - each_blocks[i].c(); - } - each_1_anchor = empty(); - }, - m(target, anchor) { - for (let i = 0; i < each_blocks.length; i += 1) { - if (each_blocks[i]) { - each_blocks[i].m(target, anchor); - } - } - insert(target, each_1_anchor, anchor); - current = true; - }, - p(ctx2, dirty) { - if (dirty & /*view, log*/ - 3) { - each_value = ensure_array_like( - /*log*/ - ctx2[0].diff.files - ); - let i; - for (i = 0; i < each_value.length; i += 1) { - const child_ctx = get_each_context2(ctx2, each_value, i); - if (each_blocks[i]) { - each_blocks[i].p(child_ctx, dirty); - transition_in(each_blocks[i], 1); - } else { - each_blocks[i] = create_each_block2(child_ctx); - each_blocks[i].c(); - transition_in(each_blocks[i], 1); - each_blocks[i].m(each_1_anchor.parentNode, each_1_anchor); - } - } - group_outros(); - for (i = each_value.length; i < each_blocks.length; i += 1) { - out(i); - } - check_outros(); - } - }, - i(local) { - if (current) - return; - for (let i = 0; i < each_value.length; i += 1) { - transition_in(each_blocks[i]); - } - current = true; - }, - o(local) { - each_blocks = each_blocks.filter(Boolean); - for (let i = 0; i < each_blocks.length; i += 1) { - transition_out(each_blocks[i]); - } - current = false; - }, - d(detaching) { - if (detaching) { - detach(each_1_anchor); - } - destroy_each(each_blocks, detaching); - } - }; -} -function create_if_block_12(ctx) { - let logtreecomponent; - let current; - logtreecomponent = new logTreeComponent_default({ - props: { - hierarchy: ( - /*logsHierarchy*/ - ctx[6] - ), - plugin: ( - /*plugin*/ - ctx[3] - ), - view: ( - /*view*/ - ctx[1] - ), - topLevel: true - } - }); - return { - c() { - create_component(logtreecomponent.$$.fragment); - }, - m(target, anchor) { - mount_component(logtreecomponent, target, anchor); - current = true; - }, - p(ctx2, dirty) { - const logtreecomponent_changes = {}; - if (dirty & /*logsHierarchy*/ - 64) - logtreecomponent_changes.hierarchy = /*logsHierarchy*/ - ctx2[6]; - if (dirty & /*plugin*/ - 8) - logtreecomponent_changes.plugin = /*plugin*/ - ctx2[3]; - if (dirty & /*view*/ - 2) - logtreecomponent_changes.view = /*view*/ - ctx2[1]; - logtreecomponent.$set(logtreecomponent_changes); - }, - i(local) { - if (current) - return; - transition_in(logtreecomponent.$$.fragment, local); - current = true; - }, - o(local) { - transition_out(logtreecomponent.$$.fragment, local); - current = false; - }, - d(detaching) { - destroy_component(logtreecomponent, detaching); - } - }; -} -function create_each_block2(ctx) { - let logfilecomponent; - let current; - logfilecomponent = new logFileComponent_default({ - props: { - view: ( - /*view*/ - ctx[1] - ), - diff: ( - /*file*/ - ctx[9] - ) - } - }); - return { - c() { - create_component(logfilecomponent.$$.fragment); - }, - m(target, anchor) { - mount_component(logfilecomponent, target, anchor); - current = true; - }, - p(ctx2, dirty) { - const logfilecomponent_changes = {}; - if (dirty & /*view*/ - 2) - logfilecomponent_changes.view = /*view*/ - ctx2[1]; - if (dirty & /*log*/ - 1) - logfilecomponent_changes.diff = /*file*/ - ctx2[9]; - logfilecomponent.$set(logfilecomponent_changes); - }, - i(local) { - if (current) - return; - transition_in(logfilecomponent.$$.fragment, local); - current = true; - }, - o(local) { - transition_out(logfilecomponent.$$.fragment, local); - current = false; - }, - d(detaching) { - destroy_component(logfilecomponent, detaching); - } - }; -} -function create_fragment3(ctx) { - var _a2; - let main; - let div4; - let div3; - let div0; - let t0; - let div2; - let t1; - let t2; - let t3; - let div1; - let t4_value = ( - /*log*/ - ctx[0].message + "" - ); - let t4; - let div3_aria_label_value; - let t5; - let current; - let mounted; - let dispose; - let if_block0 = ( - /*log*/ - ctx[0].refs.length > 0 && create_if_block_4(ctx) - ); - let if_block1 = ( - /*plugin*/ - ctx[3].settings.authorInHistoryView != "hide" && /*log*/ - ((_a2 = ctx[0].author) == null ? void 0 : _a2.name) && create_if_block_3(ctx) - ); - let if_block2 = ( - /*plugin*/ - ctx[3].settings.dateInHistoryView && create_if_block_2(ctx) - ); - let if_block3 = !/*isCollapsed*/ - ctx[4] && create_if_block3(ctx); - return { - c() { - var _a3; - main = element("main"); - div4 = element("div"); - div3 = element("div"); - div0 = element("div"); - div0.innerHTML = ``; - t0 = space(); - div2 = element("div"); - if (if_block0) - if_block0.c(); - t1 = space(); - if (if_block1) - if_block1.c(); - t2 = space(); - if (if_block2) - if_block2.c(); - t3 = space(); - div1 = element("div"); - t4 = text(t4_value); - t5 = space(); - if (if_block3) - if_block3.c(); - attr(div0, "class", "tree-item-icon nav-folder-collapse-indicator collapse-icon"); - toggle_class( - div0, - "is-collapsed", - /*isCollapsed*/ - ctx[4] - ); - attr(div1, "class", "tree-item-inner nav-folder-title-content"); - attr(div3, "class", "tree-item-self is-clickable nav-folder-title"); - attr(div3, "aria-label", div3_aria_label_value = `${/*log*/ - ctx[0].refs.length > 0 ? ( - /*log*/ - ctx[0].refs.join(", ") + "\n" - ) : ""}${/*log*/ - (_a3 = ctx[0].author) == null ? void 0 : _a3.name} -${(0, import_obsidian19.moment)( - /*log*/ - ctx[0].date - ).format( - /*plugin*/ - ctx[3].settings.commitDateFormat - )} -${/*log*/ - ctx[0].message}`); - attr( - div3, - "data-tooltip-position", - /*side*/ - ctx[5] - ); - attr(div4, "class", "tree-item nav-folder"); - toggle_class( - div4, - "is-collapsed", - /*isCollapsed*/ - ctx[4] - ); - }, - m(target, anchor) { - insert(target, main, anchor); - append2(main, div4); - append2(div4, div3); - append2(div3, div0); - append2(div3, t0); - append2(div3, div2); - if (if_block0) - if_block0.m(div2, null); - append2(div2, t1); - if (if_block1) - if_block1.m(div2, null); - append2(div2, t2); - if (if_block2) - if_block2.m(div2, null); - append2(div2, t3); - append2(div2, div1); - append2(div1, t4); - append2(div4, t5); - if (if_block3) - if_block3.m(div4, null); - current = true; - if (!mounted) { - dispose = listen( - div3, - "click", - /*click_handler*/ - ctx[8] - ); - mounted = true; - } - }, - p(ctx2, [dirty]) { - var _a3, _b; - if (!current || dirty & /*isCollapsed*/ - 16) { - toggle_class( - div0, - "is-collapsed", - /*isCollapsed*/ - ctx2[4] - ); - } - if ( - /*log*/ - ctx2[0].refs.length > 0 - ) { - if (if_block0) { - if_block0.p(ctx2, dirty); - } else { - if_block0 = create_if_block_4(ctx2); - if_block0.c(); - if_block0.m(div2, t1); - } - } else if (if_block0) { - if_block0.d(1); - if_block0 = null; - } - if ( - /*plugin*/ - ctx2[3].settings.authorInHistoryView != "hide" && /*log*/ - ((_a3 = ctx2[0].author) == null ? void 0 : _a3.name) - ) { - if (if_block1) { - if_block1.p(ctx2, dirty); - } else { - if_block1 = create_if_block_3(ctx2); - if_block1.c(); - if_block1.m(div2, t2); - } - } else if (if_block1) { - if_block1.d(1); - if_block1 = null; - } - if ( - /*plugin*/ - ctx2[3].settings.dateInHistoryView - ) { - if (if_block2) { - if_block2.p(ctx2, dirty); - } else { - if_block2 = create_if_block_2(ctx2); - if_block2.c(); - if_block2.m(div2, t3); - } - } else if (if_block2) { - if_block2.d(1); - if_block2 = null; - } - if ((!current || dirty & /*log*/ - 1) && t4_value !== (t4_value = /*log*/ - ctx2[0].message + "")) - set_data(t4, t4_value); - if (!current || dirty & /*log, plugin*/ - 9 && div3_aria_label_value !== (div3_aria_label_value = `${/*log*/ - ctx2[0].refs.length > 0 ? ( - /*log*/ - ctx2[0].refs.join(", ") + "\n" - ) : ""}${/*log*/ - (_b = ctx2[0].author) == null ? void 0 : _b.name} -${(0, import_obsidian19.moment)( - /*log*/ - ctx2[0].date - ).format( - /*plugin*/ - ctx2[3].settings.commitDateFormat - )} -${/*log*/ - ctx2[0].message}`)) { - attr(div3, "aria-label", div3_aria_label_value); - } - if (!current || dirty & /*side*/ - 32) { - attr( - div3, - "data-tooltip-position", - /*side*/ - ctx2[5] - ); - } - if (!/*isCollapsed*/ - ctx2[4]) { - if (if_block3) { - if_block3.p(ctx2, dirty); - if (dirty & /*isCollapsed*/ - 16) { - transition_in(if_block3, 1); - } - } else { - if_block3 = create_if_block3(ctx2); - if_block3.c(); - transition_in(if_block3, 1); - if_block3.m(div4, null); - } - } else if (if_block3) { - group_outros(); - transition_out(if_block3, 1, 1, () => { - if_block3 = null; - }); - check_outros(); - } - if (!current || dirty & /*isCollapsed*/ - 16) { - toggle_class( - div4, - "is-collapsed", - /*isCollapsed*/ - ctx2[4] - ); - } - }, - i(local) { - if (current) - return; - transition_in(if_block3); - current = true; - }, - o(local) { - transition_out(if_block3); - current = false; - }, - d(detaching) { - if (detaching) { - detach(main); - } - if (if_block0) - if_block0.d(); - if (if_block1) - if_block1.d(); - if (if_block2) - if_block2.d(); - if (if_block3) - if_block3.d(); - mounted = false; - dispose(); - } - }; -} -function instance3($$self, $$props, $$invalidate) { - let logsHierarchy; - let side; - let { log: log2 } = $$props; - let { view } = $$props; - let { showTree } = $$props; - let { plugin } = $$props; - let isCollapsed = true; - function authorToString(log3) { - const name = log3.author.name; - if (plugin.settings.authorInHistoryView == "full") { - return name; - } else if (plugin.settings.authorInHistoryView == "initials") { - const words = name.split(" ").filter((word) => word.length > 0); - return words.map((word) => word[0].toUpperCase()).join(""); - } - } - const click_handler = () => $$invalidate(4, isCollapsed = !isCollapsed); - $$self.$$set = ($$props2) => { - if ("log" in $$props2) - $$invalidate(0, log2 = $$props2.log); - if ("view" in $$props2) - $$invalidate(1, view = $$props2.view); - if ("showTree" in $$props2) - $$invalidate(2, showTree = $$props2.showTree); - if ("plugin" in $$props2) - $$invalidate(3, plugin = $$props2.plugin); - }; - $$self.$$.update = () => { - if ($$self.$$.dirty & /*plugin, log*/ - 9) { - $: - $$invalidate(6, logsHierarchy = { - title: "", - path: "", - vaultPath: "", - children: plugin.gitManager.getTreeStructure(log2.diff.files) - }); - } - if ($$self.$$.dirty & /*view*/ - 2) { - $: - $$invalidate(5, side = view.leaf.getRoot().side == "left" ? "right" : "left"); - } - }; - return [ - log2, - view, - showTree, - plugin, - isCollapsed, - side, - logsHierarchy, - authorToString, - click_handler - ]; -} -var LogComponent = class extends SvelteComponent { - constructor(options) { - super(); - init2(this, options, instance3, create_fragment3, safe_not_equal, { log: 0, view: 1, showTree: 2, plugin: 3 }); - } -}; -var logComponent_default = LogComponent; - -// src/ui/history/historyView.svelte -function get_each_context3(ctx, list, i) { - const child_ctx = ctx.slice(); - child_ctx[11] = list[i]; - return child_ctx; -} -function create_if_block4(ctx) { - let div1; - let div0; - let current; - let each_value = ensure_array_like( - /*logs*/ - ctx[6] - ); - let each_blocks = []; - for (let i = 0; i < each_value.length; i += 1) { - each_blocks[i] = create_each_block3(get_each_context3(ctx, each_value, i)); - } - const out = (i) => transition_out(each_blocks[i], 1, 1, () => { - each_blocks[i] = null; - }); - return { - c() { - div1 = element("div"); - div0 = element("div"); - for (let i = 0; i < each_blocks.length; i += 1) { - each_blocks[i].c(); - } - attr(div0, "class", "tree-item-children nav-folder-children"); - attr(div1, "class", "tree-item nav-folder mod-root"); - }, - m(target, anchor) { - insert(target, div1, anchor); - append2(div1, div0); - for (let i = 0; i < each_blocks.length; i += 1) { - if (each_blocks[i]) { - each_blocks[i].m(div0, null); - } - } - current = true; - }, - p(ctx2, dirty) { - if (dirty & /*view, showTree, logs, plugin*/ - 71) { - each_value = ensure_array_like( - /*logs*/ - ctx2[6] - ); - let i; - for (i = 0; i < each_value.length; i += 1) { - const child_ctx = get_each_context3(ctx2, each_value, i); - if (each_blocks[i]) { - each_blocks[i].p(child_ctx, dirty); - transition_in(each_blocks[i], 1); - } else { - each_blocks[i] = create_each_block3(child_ctx); - each_blocks[i].c(); - transition_in(each_blocks[i], 1); - each_blocks[i].m(div0, null); - } - } - group_outros(); - for (i = each_value.length; i < each_blocks.length; i += 1) { - out(i); - } - check_outros(); - } - }, - i(local) { - if (current) - return; - for (let i = 0; i < each_value.length; i += 1) { - transition_in(each_blocks[i]); - } - current = true; - }, - o(local) { - each_blocks = each_blocks.filter(Boolean); - for (let i = 0; i < each_blocks.length; i += 1) { - transition_out(each_blocks[i]); - } - current = false; - }, - d(detaching) { - if (detaching) { - detach(div1); - } - destroy_each(each_blocks, detaching); - } - }; -} -function create_each_block3(ctx) { - let logcomponent; - let current; - logcomponent = new logComponent_default({ - props: { - view: ( - /*view*/ - ctx[1] - ), - showTree: ( - /*showTree*/ - ctx[2] - ), - log: ( - /*log*/ - ctx[11] - ), - plugin: ( - /*plugin*/ - ctx[0] - ) - } - }); - return { - c() { - create_component(logcomponent.$$.fragment); - }, - m(target, anchor) { - mount_component(logcomponent, target, anchor); - current = true; - }, - p(ctx2, dirty) { - const logcomponent_changes = {}; - if (dirty & /*view*/ - 2) - logcomponent_changes.view = /*view*/ - ctx2[1]; - if (dirty & /*showTree*/ - 4) - logcomponent_changes.showTree = /*showTree*/ - ctx2[2]; - if (dirty & /*logs*/ - 64) - logcomponent_changes.log = /*log*/ - ctx2[11]; - if (dirty & /*plugin*/ - 1) - logcomponent_changes.plugin = /*plugin*/ - ctx2[0]; - logcomponent.$set(logcomponent_changes); - }, - i(local) { - if (current) - return; - transition_in(logcomponent.$$.fragment, local); - current = true; - }, - o(local) { - transition_out(logcomponent.$$.fragment, local); - current = false; - }, - d(detaching) { - destroy_component(logcomponent, detaching); - } - }; -} -function create_fragment4(ctx) { - let main; - let div3; - let div2; - let div0; - let t0; - let div1; - let t1; - let div4; - let current; - let mounted; - let dispose; - let if_block = ( - /*logs*/ - ctx[6] && create_if_block4(ctx) - ); - return { - c() { - main = element("main"); - div3 = element("div"); - div2 = element("div"); - div0 = element("div"); - t0 = space(); - div1 = element("div"); - t1 = space(); - div4 = element("div"); - if (if_block) - if_block.c(); - attr(div0, "id", "layoutChange"); - attr(div0, "class", "clickable-icon nav-action-button"); - attr(div0, "aria-label", "Change Layout"); - attr(div1, "id", "refresh"); - attr(div1, "class", "clickable-icon nav-action-button"); - attr(div1, "data-icon", "refresh-cw"); - attr(div1, "aria-label", "Refresh"); - set_style(div1, "margin", "1px"); - toggle_class( - div1, - "loading", - /*loading*/ - ctx[4] - ); - attr(div2, "class", "nav-buttons-container"); - attr(div3, "class", "nav-header"); - attr(div4, "class", "nav-files-container"); - set_style(div4, "position", "relative"); - }, - m(target, anchor) { - insert(target, main, anchor); - append2(main, div3); - append2(div3, div2); - append2(div2, div0); - ctx[7](div0); - append2(div2, t0); - append2(div2, div1); - ctx[9](div1); - append2(main, t1); - append2(main, div4); - if (if_block) - if_block.m(div4, null); - current = true; - if (!mounted) { - dispose = [ - listen( - div0, - "click", - /*click_handler*/ - ctx[8] - ), - listen(div1, "click", triggerRefresh) - ]; - mounted = true; - } - }, - p(ctx2, [dirty]) { - if (!current || dirty & /*loading*/ - 16) { - toggle_class( - div1, - "loading", - /*loading*/ - ctx2[4] - ); - } - if ( - /*logs*/ - ctx2[6] - ) { - if (if_block) { - if_block.p(ctx2, dirty); - if (dirty & /*logs*/ - 64) { - transition_in(if_block, 1); - } - } else { - if_block = create_if_block4(ctx2); - if_block.c(); - transition_in(if_block, 1); - if_block.m(div4, null); - } - } else if (if_block) { - group_outros(); - transition_out(if_block, 1, 1, () => { - if_block = null; - }); - check_outros(); - } - }, - i(local) { - if (current) - return; - transition_in(if_block); - current = true; - }, - o(local) { - transition_out(if_block); - current = false; - }, - d(detaching) { - if (detaching) { - detach(main); - } - ctx[7](null); - ctx[9](null); - if (if_block) - if_block.d(); - mounted = false; - run_all(dispose); - } - }; -} -function triggerRefresh() { - dispatchEvent(new CustomEvent("git-refresh")); -} -function instance4($$self, $$props, $$invalidate) { - let { plugin } = $$props; - let { view } = $$props; - let loading; - let buttons = []; - let logs; - let showTree = plugin.settings.treeStructure; - let layoutBtn; - addEventListener("git-view-refresh", refresh); - plugin.app.workspace.onLayoutReady(() => { - window.setTimeout( - () => { - buttons.forEach((btn) => (0, import_obsidian20.setIcon)(btn, btn.getAttr("data-icon"))); - (0, import_obsidian20.setIcon)(layoutBtn, showTree ? "list" : "folder"); - }, - 0 - ); - }); - onDestroy(() => { - removeEventListener("git-view-refresh", refresh); - }); - function refresh() { - return __awaiter(this, void 0, void 0, function* () { - $$invalidate(4, loading = true); - const isSimpleGit = plugin.gitManager instanceof SimpleGit; - $$invalidate(6, logs = yield plugin.gitManager.log(void 0, false, isSimpleGit ? 50 : 10)); - $$invalidate(4, loading = false); - }); - } - function div0_binding($$value) { - binding_callbacks[$$value ? "unshift" : "push"](() => { - layoutBtn = $$value; - $$invalidate(3, layoutBtn); - }); - } - const click_handler = () => { - $$invalidate(2, showTree = !showTree); - $$invalidate(0, plugin.settings.treeStructure = showTree, plugin); - plugin.saveSettings(); - }; - function div1_binding($$value) { - binding_callbacks[$$value ? "unshift" : "push"](() => { - buttons[6] = $$value; - $$invalidate(5, buttons); - }); - } - $$self.$$set = ($$props2) => { - if ("plugin" in $$props2) - $$invalidate(0, plugin = $$props2.plugin); - if ("view" in $$props2) - $$invalidate(1, view = $$props2.view); - }; - $$self.$$.update = () => { - if ($$self.$$.dirty & /*layoutBtn, showTree*/ - 12) { - $: { - if (layoutBtn) { - layoutBtn.empty(); - (0, import_obsidian20.setIcon)(layoutBtn, showTree ? "list" : "folder"); - } - } - } - }; - return [ - plugin, - view, - showTree, - layoutBtn, - loading, - buttons, - logs, - div0_binding, - click_handler, - div1_binding - ]; -} -var HistoryView = class extends SvelteComponent { - constructor(options) { - super(); - init2(this, options, instance4, create_fragment4, safe_not_equal, { plugin: 0, view: 1 }); - } -}; -var historyView_default = HistoryView; - -// src/ui/history/historyView.ts -var HistoryView2 = class extends import_obsidian21.ItemView { - constructor(leaf, plugin) { - super(leaf); - this.plugin = plugin; - this.hoverPopover = null; - } - getViewType() { - return HISTORY_VIEW_CONFIG.type; - } - getDisplayText() { - return HISTORY_VIEW_CONFIG.name; - } - getIcon() { - return HISTORY_VIEW_CONFIG.icon; - } - onClose() { - return super.onClose(); - } - onOpen() { - this._view = new historyView_default({ - target: this.contentEl, - props: { - plugin: this.plugin, - view: this - } - }); - return super.onOpen(); - } -}; - -// src/ui/modals/branchModal.ts -init_polyfill_buffer(); -var import_obsidian22 = require("obsidian"); -var BranchModal = class extends import_obsidian22.FuzzySuggestModal { - constructor(branches) { - super(app); - this.branches = branches; - this.setPlaceholder("Select branch to checkout"); - } - getItems() { - return this.branches; - } - getItemText(item) { - return item; - } - onChooseItem(item, evt) { - this.resolve(item); - } - open() { - super.open(); - return new Promise((resolve) => { - this.resolve = resolve; - }); - } - async onClose() { - await new Promise((resolve) => setTimeout(resolve, 10)); - if (this.resolve) - this.resolve(void 0); - } -}; - -// src/ui/modals/ignoreModal.ts -init_polyfill_buffer(); -var import_obsidian23 = require("obsidian"); -var IgnoreModal = class extends import_obsidian23.Modal { - constructor(app2, content) { - super(app2); - this.content = content; - this.resolve = null; - } - open() { - super.open(); - return new Promise((resolve) => { - this.resolve = resolve; - }); - } - onOpen() { - const { contentEl, titleEl } = this; - titleEl.setText("Edit .gitignore"); - const div = contentEl.createDiv(); - const text2 = div.createEl("textarea", { - text: this.content, - cls: ["obsidian-git-textarea"], - attr: { rows: 10, cols: 30, wrap: "off" } - }); - div.createEl("button", { - cls: ["mod-cta", "obsidian-git-center-button"], - text: "Save" - }).addEventListener("click", async () => { - this.resolve(text2.value); - this.close(); - }); - } - onClose() { - const { contentEl } = this; - this.resolve(void 0); - contentEl.empty(); - } -}; - -// src/ui/sourceControl/sourceControl.ts -init_polyfill_buffer(); -var import_obsidian30 = require("obsidian"); - -// src/ui/sourceControl/sourceControl.svelte -init_polyfill_buffer(); -var import_obsidian29 = require("obsidian"); - -// src/ui/modals/discardModal.ts -init_polyfill_buffer(); -var import_obsidian24 = require("obsidian"); -var DiscardModal = class extends import_obsidian24.Modal { - constructor(app2, deletion, filename) { - super(app2); - this.deletion = deletion; - this.filename = filename; - this.resolve = null; - } - myOpen() { - this.open(); - return new Promise((resolve) => { - this.resolve = resolve; - }); - } - onOpen() { - const { contentEl, titleEl } = this; - titleEl.setText(`${this.deletion ? "Delete" : "Discard"} this file?`); - contentEl.createEl("p").setText( - `Do you really want to ${this.deletion ? "delete" : "discard the changes of"} "${this.filename}"` - ); - const div = contentEl.createDiv({ cls: "modal-button-container" }); - const discard = div.createEl("button", { - cls: "mod-warning", - text: this.deletion ? "Delete" : "Discard" - }); - discard.addEventListener("click", async () => { - if (this.resolve) - this.resolve(true); - this.close(); - }); - discard.addEventListener("keypress", async () => { - if (this.resolve) - this.resolve(true); - this.close(); - }); - const close = div.createEl("button", { - text: "Cancel" - }); - close.addEventListener("click", () => { - if (this.resolve) - this.resolve(false); - return this.close(); - }); - close.addEventListener("keypress", () => { - if (this.resolve) - this.resolve(false); - return this.close(); - }); - } - onClose() { - const { contentEl } = this; - contentEl.empty(); - } -}; - -// src/ui/sourceControl/components/fileComponent.svelte -init_polyfill_buffer(); -var import_obsidian26 = require("obsidian"); - -// node_modules/.pnpm/obsidian-community-lib@https+++codeload.github.com+Vinzent03+obsidian-community-lib+tar.gz+e6_dmashd4lm54vdqd2gnfngnqe2m/node_modules/obsidian-community-lib/dist/index.js -init_polyfill_buffer(); - -// node_modules/.pnpm/obsidian-community-lib@https+++codeload.github.com+Vinzent03+obsidian-community-lib+tar.gz+e6_dmashd4lm54vdqd2gnfngnqe2m/node_modules/obsidian-community-lib/dist/utils.js -init_polyfill_buffer(); -var feather = __toESM(require_feather()); -var import_obsidian25 = require("obsidian"); -function hoverPreview(event, view, to) { - const targetEl = event.target; - app.workspace.trigger("hover-link", { - event, - source: view.getViewType(), - hoverParent: view, - targetEl, - linktext: to - }); -} - -// src/ui/sourceControl/components/fileComponent.svelte -function add_css3(target) { - append_styles(target, "svelte-1wbh8tp", "main.svelte-1wbh8tp .nav-file-title.svelte-1wbh8tp{align-items:center}"); -} -function create_if_block5(ctx) { - let div; - let mounted; - let dispose; - return { - c() { - div = element("div"); - attr(div, "data-icon", "go-to-file"); - attr(div, "aria-label", "Open File"); - attr(div, "class", "clickable-icon"); - }, - m(target, anchor) { - insert(target, div, anchor); - ctx[11](div); - if (!mounted) { - dispose = [ - listen(div, "auxclick", stop_propagation( - /*open*/ - ctx[5] - )), - listen(div, "click", stop_propagation( - /*open*/ - ctx[5] - )) - ]; - mounted = true; - } - }, - p: noop, - d(detaching) { - if (detaching) { - detach(div); - } - ctx[11](null); - mounted = false; - run_all(dispose); - } - }; -} -function create_fragment5(ctx) { - let main; - let div6; - let div0; - let t0_value = getDisplayPath( - /*change*/ - ctx[0].vault_path - ) + ""; - let t0; - let t1; - let div5; - let div3; - let show_if = ( - /*view*/ - ctx[1].app.vault.getAbstractFileByPath( - /*change*/ - ctx[0].vault_path - ) - ); - let t2; - let div1; - let t3; - let div2; - let t4; - let div4; - let t5_value = ( - /*change*/ - ctx[0].working_dir + "" - ); - let t5; - let div4_data_type_value; - let div6_data_path_value; - let div6_aria_label_value; - let mounted; - let dispose; - let if_block = show_if && create_if_block5(ctx); - return { - c() { - var _a2, _b, _c; - main = element("main"); - div6 = element("div"); - div0 = element("div"); - t0 = text(t0_value); - t1 = space(); - div5 = element("div"); - div3 = element("div"); - if (if_block) - if_block.c(); - t2 = space(); - div1 = element("div"); - t3 = space(); - div2 = element("div"); - t4 = space(); - div4 = element("div"); - t5 = text(t5_value); - attr(div0, "class", "tree-item-inner nav-file-title-content"); - attr(div1, "data-icon", "undo"); - attr(div1, "aria-label", "Discard"); - attr(div1, "class", "clickable-icon"); - attr(div2, "data-icon", "plus"); - attr(div2, "aria-label", "Stage"); - attr(div2, "class", "clickable-icon"); - attr(div3, "class", "buttons"); - attr(div4, "class", "type"); - attr(div4, "data-type", div4_data_type_value = /*change*/ - ctx[0].working_dir); - attr(div5, "class", "git-tools"); - attr(div6, "class", "tree-item-self is-clickable nav-file-title svelte-1wbh8tp"); - attr(div6, "data-path", div6_data_path_value = /*change*/ - ctx[0].vault_path); - attr( - div6, - "data-tooltip-position", - /*side*/ - ctx[3] - ); - attr(div6, "aria-label", div6_aria_label_value = /*change*/ - ctx[0].vault_path); - toggle_class( - div6, - "is-active", - /*view*/ - ((_a2 = ctx[1].plugin.lastDiffViewState) == null ? void 0 : _a2.file) == /*change*/ - ctx[0].vault_path && !/*view*/ - ((_b = ctx[1].plugin.lastDiffViewState) == null ? void 0 : _b.hash) && !/*view*/ - ((_c = ctx[1].plugin.lastDiffViewState) == null ? void 0 : _c.staged) - ); - attr(main, "class", "tree-item nav-file svelte-1wbh8tp"); - }, - m(target, anchor) { - insert(target, main, anchor); - append2(main, div6); - append2(div6, div0); - append2(div0, t0); - append2(div6, t1); - append2(div6, div5); - append2(div5, div3); - if (if_block) - if_block.m(div3, null); - append2(div3, t2); - append2(div3, div1); - ctx[12](div1); - append2(div3, t3); - append2(div3, div2); - ctx[13](div2); - append2(div5, t4); - append2(div5, div4); - append2(div4, t5); - if (!mounted) { - dispose = [ - listen(div1, "click", stop_propagation( - /*discard*/ - ctx[8] - )), - listen(div2, "click", stop_propagation( - /*stage*/ - ctx[6] - )), - listen( - main, - "mouseover", - /*hover*/ - ctx[4] - ), - listen(main, "click", stop_propagation( - /*showDiff*/ - ctx[7] - )), - listen(main, "auxclick", stop_propagation( - /*showDiff*/ - ctx[7] - )), - listen( - main, - "focus", - /*focus_handler*/ - ctx[10] - ) - ]; - mounted = true; - } - }, - p(ctx2, [dirty]) { - var _a2, _b, _c; - if (dirty & /*change*/ - 1 && t0_value !== (t0_value = getDisplayPath( - /*change*/ - ctx2[0].vault_path - ) + "")) - set_data(t0, t0_value); - if (dirty & /*view, change*/ - 3) - show_if = /*view*/ - ctx2[1].app.vault.getAbstractFileByPath( - /*change*/ - ctx2[0].vault_path - ); - if (show_if) { - if (if_block) { - if_block.p(ctx2, dirty); - } else { - if_block = create_if_block5(ctx2); - if_block.c(); - if_block.m(div3, t2); - } - } else if (if_block) { - if_block.d(1); - if_block = null; - } - if (dirty & /*change*/ - 1 && t5_value !== (t5_value = /*change*/ - ctx2[0].working_dir + "")) - set_data(t5, t5_value); - if (dirty & /*change*/ - 1 && div4_data_type_value !== (div4_data_type_value = /*change*/ - ctx2[0].working_dir)) { - attr(div4, "data-type", div4_data_type_value); - } - if (dirty & /*change*/ - 1 && div6_data_path_value !== (div6_data_path_value = /*change*/ - ctx2[0].vault_path)) { - attr(div6, "data-path", div6_data_path_value); - } - if (dirty & /*side*/ - 8) { - attr( - div6, - "data-tooltip-position", - /*side*/ - ctx2[3] - ); - } - if (dirty & /*change*/ - 1 && div6_aria_label_value !== (div6_aria_label_value = /*change*/ - ctx2[0].vault_path)) { - attr(div6, "aria-label", div6_aria_label_value); - } - if (dirty & /*view, change*/ - 3) { - toggle_class( - div6, - "is-active", - /*view*/ - ((_a2 = ctx2[1].plugin.lastDiffViewState) == null ? void 0 : _a2.file) == /*change*/ - ctx2[0].vault_path && !/*view*/ - ((_b = ctx2[1].plugin.lastDiffViewState) == null ? void 0 : _b.hash) && !/*view*/ - ((_c = ctx2[1].plugin.lastDiffViewState) == null ? void 0 : _c.staged) - ); - } - }, - i: noop, - o: noop, - d(detaching) { - if (detaching) { - detach(main); - } - if (if_block) - if_block.d(); - ctx[12](null); - ctx[13](null); - mounted = false; - run_all(dispose); - } - }; -} -function instance5($$self, $$props, $$invalidate) { - let side; - let { change } = $$props; - let { view } = $$props; - let { manager } = $$props; - let buttons = []; - window.setTimeout(() => buttons.forEach((b) => (0, import_obsidian26.setIcon)(b, b.getAttr("data-icon"))), 0); - function hover(event) { - if (app.vault.getAbstractFileByPath(change.vault_path)) { - hoverPreview(event, view, change.vault_path); - } - } - function open(event) { - var _a2; - const file = view.app.vault.getAbstractFileByPath(change.vault_path); - console.log(event); - if (file instanceof import_obsidian26.TFile) { - (_a2 = getNewLeaf(event)) === null || _a2 === void 0 ? void 0 : _a2.openFile(file); - } - } - function stage() { - manager.stage(change.path, false).finally(() => { - dispatchEvent(new CustomEvent("git-refresh")); - }); - } - function showDiff(event) { - var _a2; - (_a2 = getNewLeaf(event)) === null || _a2 === void 0 ? void 0 : _a2.setViewState({ - type: DIFF_VIEW_CONFIG.type, - active: true, - state: { file: change.path, staged: false } - }); - } - function discard() { - const deleteFile = change.working_dir == "U"; - new DiscardModal(view.app, deleteFile, change.vault_path).myOpen().then((shouldDiscard) => { - if (shouldDiscard === true) { - if (deleteFile) { - view.app.vault.adapter.remove(change.vault_path).finally(() => { - dispatchEvent(new CustomEvent("git-refresh")); - }); - } else { - manager.discard(change.path).finally(() => { - dispatchEvent(new CustomEvent("git-refresh")); - }); - } - } - }); - } - function focus_handler(event) { - bubble.call(this, $$self, event); - } - function div_binding($$value) { - binding_callbacks[$$value ? "unshift" : "push"](() => { - buttons[1] = $$value; - $$invalidate(2, buttons); - }); - } - function div1_binding($$value) { - binding_callbacks[$$value ? "unshift" : "push"](() => { - buttons[0] = $$value; - $$invalidate(2, buttons); - }); - } - function div2_binding($$value) { - binding_callbacks[$$value ? "unshift" : "push"](() => { - buttons[2] = $$value; - $$invalidate(2, buttons); - }); - } - $$self.$$set = ($$props2) => { - if ("change" in $$props2) - $$invalidate(0, change = $$props2.change); - if ("view" in $$props2) - $$invalidate(1, view = $$props2.view); - if ("manager" in $$props2) - $$invalidate(9, manager = $$props2.manager); - }; - $$self.$$.update = () => { - if ($$self.$$.dirty & /*view*/ - 2) { - $: - $$invalidate(3, side = view.leaf.getRoot().side == "left" ? "right" : "left"); - } - }; - return [ - change, - view, - buttons, - side, - hover, - open, - stage, - showDiff, - discard, - manager, - focus_handler, - div_binding, - div1_binding, - div2_binding - ]; -} -var FileComponent = class extends SvelteComponent { - constructor(options) { - super(); - init2(this, options, instance5, create_fragment5, safe_not_equal, { change: 0, view: 1, manager: 9 }, add_css3); - } -}; -var fileComponent_default = FileComponent; - -// src/ui/sourceControl/components/pulledFileComponent.svelte -init_polyfill_buffer(); -var import_obsidian27 = require("obsidian"); -function add_css4(target) { - append_styles(target, "svelte-1wbh8tp", "main.svelte-1wbh8tp .nav-file-title.svelte-1wbh8tp{align-items:center}"); -} -function create_fragment6(ctx) { - let main; - let div2; - let div0; - let t0_value = getDisplayPath( - /*change*/ - ctx[0].vault_path - ) + ""; - let t0; - let t1; - let div1; - let span; - let t2_value = ( - /*change*/ - ctx[0].working_dir + "" - ); - let t2; - let span_data_type_value; - let div2_data_path_value; - let div2_aria_label_value; - let mounted; - let dispose; - return { - c() { - main = element("main"); - div2 = element("div"); - div0 = element("div"); - t0 = text(t0_value); - t1 = space(); - div1 = element("div"); - span = element("span"); - t2 = text(t2_value); - attr(div0, "class", "tree-item-inner nav-file-title-content"); - attr(span, "class", "type"); - attr(span, "data-type", span_data_type_value = /*change*/ - ctx[0].working_dir); - attr(div1, "class", "git-tools"); - attr(div2, "class", "tree-item-self is-clickable nav-file-title svelte-1wbh8tp"); - attr(div2, "data-path", div2_data_path_value = /*change*/ - ctx[0].vault_path); - attr( - div2, - "data-tooltip-position", - /*side*/ - ctx[1] - ); - attr(div2, "aria-label", div2_aria_label_value = /*change*/ - ctx[0].vault_path); - attr(main, "class", "tree-item nav-file svelte-1wbh8tp"); - }, - m(target, anchor) { - insert(target, main, anchor); - append2(main, div2); - append2(div2, div0); - append2(div0, t0); - append2(div2, t1); - append2(div2, div1); - append2(div1, span); - append2(span, t2); - if (!mounted) { - dispose = [ - listen( - main, - "mouseover", - /*hover*/ - ctx[2] - ), - listen(main, "click", stop_propagation( - /*open*/ - ctx[3] - )), - listen(main, "auxclick", stop_propagation( - /*open*/ - ctx[3] - )), - listen( - main, - "focus", - /*focus_handler*/ - ctx[5] - ) - ]; - mounted = true; - } - }, - p(ctx2, [dirty]) { - if (dirty & /*change*/ - 1 && t0_value !== (t0_value = getDisplayPath( - /*change*/ - ctx2[0].vault_path - ) + "")) - set_data(t0, t0_value); - if (dirty & /*change*/ - 1 && t2_value !== (t2_value = /*change*/ - ctx2[0].working_dir + "")) - set_data(t2, t2_value); - if (dirty & /*change*/ - 1 && span_data_type_value !== (span_data_type_value = /*change*/ - ctx2[0].working_dir)) { - attr(span, "data-type", span_data_type_value); - } - if (dirty & /*change*/ - 1 && div2_data_path_value !== (div2_data_path_value = /*change*/ - ctx2[0].vault_path)) { - attr(div2, "data-path", div2_data_path_value); - } - if (dirty & /*side*/ - 2) { - attr( - div2, - "data-tooltip-position", - /*side*/ - ctx2[1] - ); - } - if (dirty & /*change*/ - 1 && div2_aria_label_value !== (div2_aria_label_value = /*change*/ - ctx2[0].vault_path)) { - attr(div2, "aria-label", div2_aria_label_value); - } - }, - i: noop, - o: noop, - d(detaching) { - if (detaching) { - detach(main); - } - mounted = false; - run_all(dispose); - } - }; -} -function instance6($$self, $$props, $$invalidate) { - let side; - let { change } = $$props; - let { view } = $$props; - function hover(event) { - if (app.vault.getAbstractFileByPath(change.vault_path)) { - hoverPreview(event, view, change.vault_path); - } - } - function open(event) { - var _a2; - const file = view.app.vault.getAbstractFileByPath(change.vault_path); - if (file instanceof import_obsidian27.TFile) { - (_a2 = getNewLeaf(event)) === null || _a2 === void 0 ? void 0 : _a2.openFile(file); - } - } - function focus_handler(event) { - bubble.call(this, $$self, event); - } - $$self.$$set = ($$props2) => { - if ("change" in $$props2) - $$invalidate(0, change = $$props2.change); - if ("view" in $$props2) - $$invalidate(4, view = $$props2.view); - }; - $$self.$$.update = () => { - if ($$self.$$.dirty & /*view*/ - 16) { - $: - $$invalidate(1, side = view.leaf.getRoot().side == "left" ? "right" : "left"); - } - }; - return [change, side, hover, open, view, focus_handler]; -} -var PulledFileComponent = class extends SvelteComponent { - constructor(options) { - super(); - init2(this, options, instance6, create_fragment6, safe_not_equal, { change: 0, view: 4 }, add_css4); - } -}; -var pulledFileComponent_default = PulledFileComponent; - -// src/ui/sourceControl/components/stagedFileComponent.svelte -init_polyfill_buffer(); -var import_obsidian28 = require("obsidian"); -function add_css5(target) { - append_styles(target, "svelte-1wbh8tp", "main.svelte-1wbh8tp .nav-file-title.svelte-1wbh8tp{align-items:center}"); -} -function create_if_block6(ctx) { - let div; - let mounted; - let dispose; - return { - c() { - div = element("div"); - attr(div, "data-icon", "go-to-file"); - attr(div, "aria-label", "Open File"); - attr(div, "class", "clickable-icon"); - }, - m(target, anchor) { - insert(target, div, anchor); - ctx[10](div); - if (!mounted) { - dispose = listen(div, "click", stop_propagation( - /*open*/ - ctx[5] - )); - mounted = true; - } - }, - p: noop, - d(detaching) { - if (detaching) { - detach(div); - } - ctx[10](null); - mounted = false; - dispose(); - } - }; -} -function create_fragment7(ctx) { - let main; - let div5; - let div0; - let t0_value = getDisplayPath( - /*change*/ - ctx[0].vault_path - ) + ""; - let t0; - let t1; - let div4; - let div2; - let show_if = ( - /*view*/ - ctx[1].app.vault.getAbstractFileByPath( - /*change*/ - ctx[0].vault_path - ) - ); - let t2; - let div1; - let t3; - let div3; - let t4_value = ( - /*change*/ - ctx[0].index + "" - ); - let t4; - let div3_data_type_value; - let div5_data_path_value; - let div5_aria_label_value; - let mounted; - let dispose; - let if_block = show_if && create_if_block6(ctx); - return { - c() { - var _a2, _b, _c; - main = element("main"); - div5 = element("div"); - div0 = element("div"); - t0 = text(t0_value); - t1 = space(); - div4 = element("div"); - div2 = element("div"); - if (if_block) - if_block.c(); - t2 = space(); - div1 = element("div"); - t3 = space(); - div3 = element("div"); - t4 = text(t4_value); - attr(div0, "class", "tree-item-inner nav-file-title-content"); - attr(div1, "data-icon", "minus"); - attr(div1, "aria-label", "Unstage"); - attr(div1, "class", "clickable-icon"); - attr(div2, "class", "buttons"); - attr(div3, "class", "type"); - attr(div3, "data-type", div3_data_type_value = /*change*/ - ctx[0].index); - attr(div4, "class", "git-tools"); - attr(div5, "class", "tree-item-self is-clickable nav-file-title svelte-1wbh8tp"); - attr(div5, "data-path", div5_data_path_value = /*change*/ - ctx[0].vault_path); - attr( - div5, - "data-tooltip-position", - /*side*/ - ctx[3] - ); - attr(div5, "aria-label", div5_aria_label_value = /*change*/ - ctx[0].vault_path); - toggle_class( - div5, - "is-active", - /*view*/ - ((_a2 = ctx[1].plugin.lastDiffViewState) == null ? void 0 : _a2.file) == /*change*/ - ctx[0].vault_path && !/*view*/ - ((_b = ctx[1].plugin.lastDiffViewState) == null ? void 0 : _b.hash) && /*view*/ - ((_c = ctx[1].plugin.lastDiffViewState) == null ? void 0 : _c.staged) - ); - attr(main, "class", "tree-item nav-file svelte-1wbh8tp"); - }, - m(target, anchor) { - insert(target, main, anchor); - append2(main, div5); - append2(div5, div0); - append2(div0, t0); - append2(div5, t1); - append2(div5, div4); - append2(div4, div2); - if (if_block) - if_block.m(div2, null); - append2(div2, t2); - append2(div2, div1); - ctx[11](div1); - append2(div4, t3); - append2(div4, div3); - append2(div3, t4); - if (!mounted) { - dispose = [ - listen(div1, "click", stop_propagation( - /*unstage*/ - ctx[7] - )), - listen( - main, - "mouseover", - /*hover*/ - ctx[4] - ), - listen( - main, - "focus", - /*focus_handler*/ - ctx[9] - ), - listen(main, "click", stop_propagation( - /*showDiff*/ - ctx[6] - )), - listen(main, "auxclick", stop_propagation( - /*showDiff*/ - ctx[6] - )) - ]; - mounted = true; - } - }, - p(ctx2, [dirty]) { - var _a2, _b, _c; - if (dirty & /*change*/ - 1 && t0_value !== (t0_value = getDisplayPath( - /*change*/ - ctx2[0].vault_path - ) + "")) - set_data(t0, t0_value); - if (dirty & /*view, change*/ - 3) - show_if = /*view*/ - ctx2[1].app.vault.getAbstractFileByPath( - /*change*/ - ctx2[0].vault_path - ); - if (show_if) { - if (if_block) { - if_block.p(ctx2, dirty); - } else { - if_block = create_if_block6(ctx2); - if_block.c(); - if_block.m(div2, t2); - } - } else if (if_block) { - if_block.d(1); - if_block = null; - } - if (dirty & /*change*/ - 1 && t4_value !== (t4_value = /*change*/ - ctx2[0].index + "")) - set_data(t4, t4_value); - if (dirty & /*change*/ - 1 && div3_data_type_value !== (div3_data_type_value = /*change*/ - ctx2[0].index)) { - attr(div3, "data-type", div3_data_type_value); - } - if (dirty & /*change*/ - 1 && div5_data_path_value !== (div5_data_path_value = /*change*/ - ctx2[0].vault_path)) { - attr(div5, "data-path", div5_data_path_value); - } - if (dirty & /*side*/ - 8) { - attr( - div5, - "data-tooltip-position", - /*side*/ - ctx2[3] - ); - } - if (dirty & /*change*/ - 1 && div5_aria_label_value !== (div5_aria_label_value = /*change*/ - ctx2[0].vault_path)) { - attr(div5, "aria-label", div5_aria_label_value); - } - if (dirty & /*view, change*/ - 3) { - toggle_class( - div5, - "is-active", - /*view*/ - ((_a2 = ctx2[1].plugin.lastDiffViewState) == null ? void 0 : _a2.file) == /*change*/ - ctx2[0].vault_path && !/*view*/ - ((_b = ctx2[1].plugin.lastDiffViewState) == null ? void 0 : _b.hash) && /*view*/ - ((_c = ctx2[1].plugin.lastDiffViewState) == null ? void 0 : _c.staged) - ); - } - }, - i: noop, - o: noop, - d(detaching) { - if (detaching) { - detach(main); - } - if (if_block) - if_block.d(); - ctx[11](null); - mounted = false; - run_all(dispose); - } - }; -} -function instance7($$self, $$props, $$invalidate) { - let side; - let { change } = $$props; - let { view } = $$props; - let { manager } = $$props; - let buttons = []; - window.setTimeout(() => buttons.forEach((b) => (0, import_obsidian28.setIcon)(b, b.getAttr("data-icon"))), 0); - function hover(event) { - if (app.vault.getAbstractFileByPath(change.vault_path)) { - hoverPreview(event, view, change.vault_path); - } - } - function open(event) { - var _a2; - const file = view.app.vault.getAbstractFileByPath(change.vault_path); - if (file instanceof import_obsidian28.TFile) { - (_a2 = getNewLeaf(event)) === null || _a2 === void 0 ? void 0 : _a2.openFile(file); - } - } - function showDiff(event) { - var _a2; - (_a2 = getNewLeaf(event)) === null || _a2 === void 0 ? void 0 : _a2.setViewState({ - type: DIFF_VIEW_CONFIG.type, - active: true, - state: { file: change.path, staged: true } - }); - } - function unstage() { - manager.unstage(change.path, false).finally(() => { - dispatchEvent(new CustomEvent("git-refresh")); - }); - } - function focus_handler(event) { - bubble.call(this, $$self, event); - } - function div_binding($$value) { - binding_callbacks[$$value ? "unshift" : "push"](() => { - buttons[1] = $$value; - $$invalidate(2, buttons); - }); - } - function div1_binding($$value) { - binding_callbacks[$$value ? "unshift" : "push"](() => { - buttons[0] = $$value; - $$invalidate(2, buttons); - }); - } - $$self.$$set = ($$props2) => { - if ("change" in $$props2) - $$invalidate(0, change = $$props2.change); - if ("view" in $$props2) - $$invalidate(1, view = $$props2.view); - if ("manager" in $$props2) - $$invalidate(8, manager = $$props2.manager); - }; - $$self.$$.update = () => { - if ($$self.$$.dirty & /*view*/ - 2) { - $: - $$invalidate(3, side = view.leaf.getRoot().side == "left" ? "right" : "left"); - } - }; - return [ - change, - view, - buttons, - side, - hover, - open, - showDiff, - unstage, - manager, - focus_handler, - div_binding, - div1_binding - ]; -} -var StagedFileComponent = class extends SvelteComponent { - constructor(options) { - super(); - init2(this, options, instance7, create_fragment7, safe_not_equal, { change: 0, view: 1, manager: 8 }, add_css5); - } -}; -var stagedFileComponent_default = StagedFileComponent; - -// src/ui/sourceControl/components/treeComponent.svelte -init_polyfill_buffer(); -function add_css6(target) { - append_styles(target, "svelte-hup5mn", "main.svelte-hup5mn .nav-folder-title.svelte-hup5mn{align-items:center}"); -} -function get_each_context4(ctx, list, i) { - const child_ctx = ctx.slice(); - child_ctx[15] = list[i]; - return child_ctx; -} -function create_else_block3(ctx) { - let div7; - let div6; - let div0; - let t0; - let div1; - let t1; - let div2; - let t2_value = ( - /*entity*/ - ctx[15].title + "" - ); - let t2; - let t3; - let div5; - let div4; - let t4; - let div3; - let div6_aria_label_value; - let t5; - let t6; - let current; - let mounted; - let dispose; - function select_block_type_2(ctx2, dirty) { - if ( - /*fileType*/ - ctx2[3] == 0 /* staged */ - ) - return create_if_block_5; - return create_else_block_1; - } - let current_block_type = select_block_type_2(ctx, -1); - let if_block0 = current_block_type(ctx); - let if_block1 = !/*closed*/ - ctx[5][ - /*entity*/ - ctx[15].title - ] && create_if_block_42(ctx); - function click_handler_3() { - return ( - /*click_handler_3*/ - ctx[14]( - /*entity*/ - ctx[15] - ) - ); - } - return { - c() { - div7 = element("div"); - div6 = element("div"); - div0 = element("div"); - t0 = space(); - div1 = element("div"); - div1.innerHTML = ``; - t1 = space(); - div2 = element("div"); - t2 = text(t2_value); - t3 = space(); - div5 = element("div"); - div4 = element("div"); - if_block0.c(); - t4 = space(); - div3 = element("div"); - t5 = space(); - if (if_block1) - if_block1.c(); - t6 = space(); - attr(div0, "data-icon", "folder"); - set_style(div0, "padding-right", "5px"); - set_style(div0, "display", "flex"); - attr(div1, "class", "tree-item-icon nav-folder-collapse-indicator collapse-icon"); - toggle_class( - div1, - "is-collapsed", - /*closed*/ - ctx[5][ - /*entity*/ - ctx[15].title - ] - ); - attr(div2, "class", "tree-item-inner nav-folder-title-content"); - set_style(div3, "width", "11px"); - attr(div4, "class", "buttons"); - attr(div5, "class", "git-tools"); - attr(div6, "class", "tree-item-self is-clickable nav-folder-title svelte-hup5mn"); - attr( - div6, - "data-tooltip-position", - /*side*/ - ctx[6] - ); - attr(div6, "aria-label", div6_aria_label_value = /*entity*/ - ctx[15].vaultPath); - attr(div7, "class", "tree-item nav-folder"); - toggle_class( - div7, - "is-collapsed", - /*closed*/ - ctx[5][ - /*entity*/ - ctx[15].title - ] - ); - }, - m(target, anchor) { - insert(target, div7, anchor); - append2(div7, div6); - append2(div6, div0); - append2(div6, t0); - append2(div6, div1); - append2(div6, t1); - append2(div6, div2); - append2(div2, t2); - append2(div6, t3); - append2(div6, div5); - append2(div5, div4); - if_block0.m(div4, null); - append2(div4, t4); - append2(div4, div3); - append2(div7, t5); - if (if_block1) - if_block1.m(div7, null); - append2(div7, t6); - current = true; - if (!mounted) { - dispose = listen(div7, "click", stop_propagation(click_handler_3)); - mounted = true; - } - }, - p(new_ctx, dirty) { - ctx = new_ctx; - if (!current || dirty & /*closed, hierarchy*/ - 33) { - toggle_class( - div1, - "is-collapsed", - /*closed*/ - ctx[5][ - /*entity*/ - ctx[15].title - ] - ); - } - if ((!current || dirty & /*hierarchy*/ - 1) && t2_value !== (t2_value = /*entity*/ - ctx[15].title + "")) - set_data(t2, t2_value); - if (current_block_type === (current_block_type = select_block_type_2(ctx, dirty)) && if_block0) { - if_block0.p(ctx, dirty); - } else { - if_block0.d(1); - if_block0 = current_block_type(ctx); - if (if_block0) { - if_block0.c(); - if_block0.m(div4, t4); - } - } - if (!current || dirty & /*side*/ - 64) { - attr( - div6, - "data-tooltip-position", - /*side*/ - ctx[6] - ); - } - if (!current || dirty & /*hierarchy*/ - 1 && div6_aria_label_value !== (div6_aria_label_value = /*entity*/ - ctx[15].vaultPath)) { - attr(div6, "aria-label", div6_aria_label_value); - } - if (!/*closed*/ - ctx[5][ - /*entity*/ - ctx[15].title - ]) { - if (if_block1) { - if_block1.p(ctx, dirty); - if (dirty & /*closed, hierarchy*/ - 33) { - transition_in(if_block1, 1); - } - } else { - if_block1 = create_if_block_42(ctx); - if_block1.c(); - transition_in(if_block1, 1); - if_block1.m(div7, t6); - } - } else if (if_block1) { - group_outros(); - transition_out(if_block1, 1, 1, () => { - if_block1 = null; - }); - check_outros(); - } - if (!current || dirty & /*closed, hierarchy*/ - 33) { - toggle_class( - div7, - "is-collapsed", - /*closed*/ - ctx[5][ - /*entity*/ - ctx[15].title - ] - ); - } - }, - i(local) { - if (current) - return; - transition_in(if_block1); - current = true; - }, - o(local) { - transition_out(if_block1); - current = false; - }, - d(detaching) { - if (detaching) { - detach(div7); - } - if_block0.d(); - if (if_block1) - if_block1.d(); - mounted = false; - dispose(); - } - }; -} -function create_if_block7(ctx) { - let div; - let current_block_type_index; - let if_block; - let t; - let current; - const if_block_creators = [create_if_block_13, create_if_block_22, create_if_block_32]; - const if_blocks = []; - function select_block_type_1(ctx2, dirty) { - if ( - /*fileType*/ - ctx2[3] == 0 /* staged */ - ) - return 0; - if ( - /*fileType*/ - ctx2[3] == 1 /* changed */ - ) - return 1; - if ( - /*fileType*/ - ctx2[3] == 2 /* pulled */ - ) - return 2; - return -1; - } - if (~(current_block_type_index = select_block_type_1(ctx, -1))) { - if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx); - } - return { - c() { - div = element("div"); - if (if_block) - if_block.c(); - t = space(); - }, - m(target, anchor) { - insert(target, div, anchor); - if (~current_block_type_index) { - if_blocks[current_block_type_index].m(div, null); - } - append2(div, t); - current = true; - }, - p(ctx2, dirty) { - let previous_block_index = current_block_type_index; - current_block_type_index = select_block_type_1(ctx2, dirty); - if (current_block_type_index === previous_block_index) { - if (~current_block_type_index) { - if_blocks[current_block_type_index].p(ctx2, dirty); - } - } else { - if (if_block) { - group_outros(); - transition_out(if_blocks[previous_block_index], 1, 1, () => { - if_blocks[previous_block_index] = null; - }); - check_outros(); - } - if (~current_block_type_index) { - if_block = if_blocks[current_block_type_index]; - if (!if_block) { - if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx2); - if_block.c(); - } else { - if_block.p(ctx2, dirty); - } - transition_in(if_block, 1); - if_block.m(div, t); - } else { - if_block = null; - } - } - }, - i(local) { - if (current) - return; - transition_in(if_block); - current = true; - }, - o(local) { - transition_out(if_block); - current = false; - }, - d(detaching) { - if (detaching) { - detach(div); - } - if (~current_block_type_index) { - if_blocks[current_block_type_index].d(); - } - } - }; -} -function create_else_block_1(ctx) { - let div0; - let t; - let div1; - let mounted; - let dispose; - function click_handler_1() { - return ( - /*click_handler_1*/ - ctx[12]( - /*entity*/ - ctx[15] - ) - ); - } - function click_handler_2() { - return ( - /*click_handler_2*/ - ctx[13]( - /*entity*/ - ctx[15] - ) - ); - } - return { - c() { - div0 = element("div"); - div0.innerHTML = ``; - t = space(); - div1 = element("div"); - div1.innerHTML = ``; - attr(div0, "data-icon", "undo"); - attr(div0, "aria-label", "Discard"); - attr(div0, "class", "clickable-icon"); - attr(div1, "data-icon", "plus"); - attr(div1, "aria-label", "Stage"); - attr(div1, "class", "clickable-icon"); - }, - m(target, anchor) { - insert(target, div0, anchor); - insert(target, t, anchor); - insert(target, div1, anchor); - if (!mounted) { - dispose = [ - listen(div0, "click", stop_propagation(click_handler_1)), - listen(div1, "click", stop_propagation(click_handler_2)) - ]; - mounted = true; - } - }, - p(new_ctx, dirty) { - ctx = new_ctx; - }, - d(detaching) { - if (detaching) { - detach(div0); - detach(t); - detach(div1); - } - mounted = false; - run_all(dispose); - } - }; -} -function create_if_block_5(ctx) { - let div; - let mounted; - let dispose; - function click_handler() { - return ( - /*click_handler*/ - ctx[11]( - /*entity*/ - ctx[15] - ) - ); - } - return { - c() { - div = element("div"); - div.innerHTML = ``; - attr(div, "data-icon", "minus"); - attr(div, "aria-label", "Unstage"); - attr(div, "class", "clickable-icon"); - }, - m(target, anchor) { - insert(target, div, anchor); - if (!mounted) { - dispose = listen(div, "click", stop_propagation(click_handler)); - mounted = true; - } - }, - p(new_ctx, dirty) { - ctx = new_ctx; - }, - d(detaching) { - if (detaching) { - detach(div); - } - mounted = false; - dispose(); - } - }; -} -function create_if_block_42(ctx) { - let div; - let treecomponent; - let div_transition; - let current; - treecomponent = new TreeComponent({ - props: { - hierarchy: ( - /*entity*/ - ctx[15] - ), - plugin: ( - /*plugin*/ - ctx[1] - ), - view: ( - /*view*/ - ctx[2] - ), - fileType: ( - /*fileType*/ - ctx[3] - ) - } - }); - return { - c() { - div = element("div"); - create_component(treecomponent.$$.fragment); - attr(div, "class", "tree-item-children nav-folder-children"); - }, - m(target, anchor) { - insert(target, div, anchor); - mount_component(treecomponent, div, null); - current = true; - }, - p(ctx2, dirty) { - const treecomponent_changes = {}; - if (dirty & /*hierarchy*/ - 1) - treecomponent_changes.hierarchy = /*entity*/ - ctx2[15]; - if (dirty & /*plugin*/ - 2) - treecomponent_changes.plugin = /*plugin*/ - ctx2[1]; - if (dirty & /*view*/ - 4) - treecomponent_changes.view = /*view*/ - ctx2[2]; - if (dirty & /*fileType*/ - 8) - treecomponent_changes.fileType = /*fileType*/ - ctx2[3]; - treecomponent.$set(treecomponent_changes); - }, - i(local) { - if (current) - return; - transition_in(treecomponent.$$.fragment, local); - if (local) { - add_render_callback(() => { - if (!current) - return; - if (!div_transition) - div_transition = create_bidirectional_transition(div, slide, { duration: 150 }, true); - div_transition.run(1); - }); - } - current = true; - }, - o(local) { - transition_out(treecomponent.$$.fragment, local); - if (local) { - if (!div_transition) - div_transition = create_bidirectional_transition(div, slide, { duration: 150 }, false); - div_transition.run(0); - } - current = false; - }, - d(detaching) { - if (detaching) { - detach(div); - } - destroy_component(treecomponent); - if (detaching && div_transition) - div_transition.end(); - } - }; -} -function create_if_block_32(ctx) { - let pulledfilecomponent; - let current; - pulledfilecomponent = new pulledFileComponent_default({ - props: { - change: ( - /*entity*/ - ctx[15].data - ), - view: ( - /*view*/ - ctx[2] - ) - } - }); - return { - c() { - create_component(pulledfilecomponent.$$.fragment); - }, - m(target, anchor) { - mount_component(pulledfilecomponent, target, anchor); - current = true; - }, - p(ctx2, dirty) { - const pulledfilecomponent_changes = {}; - if (dirty & /*hierarchy*/ - 1) - pulledfilecomponent_changes.change = /*entity*/ - ctx2[15].data; - if (dirty & /*view*/ - 4) - pulledfilecomponent_changes.view = /*view*/ - ctx2[2]; - pulledfilecomponent.$set(pulledfilecomponent_changes); - }, - i(local) { - if (current) - return; - transition_in(pulledfilecomponent.$$.fragment, local); - current = true; - }, - o(local) { - transition_out(pulledfilecomponent.$$.fragment, local); - current = false; - }, - d(detaching) { - destroy_component(pulledfilecomponent, detaching); - } - }; -} -function create_if_block_22(ctx) { - let filecomponent; - let current; - filecomponent = new fileComponent_default({ - props: { - change: ( - /*entity*/ - ctx[15].data - ), - manager: ( - /*plugin*/ - ctx[1].gitManager - ), - view: ( - /*view*/ - ctx[2] - ) - } - }); - return { - c() { - create_component(filecomponent.$$.fragment); - }, - m(target, anchor) { - mount_component(filecomponent, target, anchor); - current = true; - }, - p(ctx2, dirty) { - const filecomponent_changes = {}; - if (dirty & /*hierarchy*/ - 1) - filecomponent_changes.change = /*entity*/ - ctx2[15].data; - if (dirty & /*plugin*/ - 2) - filecomponent_changes.manager = /*plugin*/ - ctx2[1].gitManager; - if (dirty & /*view*/ - 4) - filecomponent_changes.view = /*view*/ - ctx2[2]; - filecomponent.$set(filecomponent_changes); - }, - i(local) { - if (current) - return; - transition_in(filecomponent.$$.fragment, local); - current = true; - }, - o(local) { - transition_out(filecomponent.$$.fragment, local); - current = false; - }, - d(detaching) { - destroy_component(filecomponent, detaching); - } - }; -} -function create_if_block_13(ctx) { - let stagedfilecomponent; - let current; - stagedfilecomponent = new stagedFileComponent_default({ - props: { - change: ( - /*entity*/ - ctx[15].data - ), - manager: ( - /*plugin*/ - ctx[1].gitManager - ), - view: ( - /*view*/ - ctx[2] - ) - } - }); - return { - c() { - create_component(stagedfilecomponent.$$.fragment); - }, - m(target, anchor) { - mount_component(stagedfilecomponent, target, anchor); - current = true; - }, - p(ctx2, dirty) { - const stagedfilecomponent_changes = {}; - if (dirty & /*hierarchy*/ - 1) - stagedfilecomponent_changes.change = /*entity*/ - ctx2[15].data; - if (dirty & /*plugin*/ - 2) - stagedfilecomponent_changes.manager = /*plugin*/ - ctx2[1].gitManager; - if (dirty & /*view*/ - 4) - stagedfilecomponent_changes.view = /*view*/ - ctx2[2]; - stagedfilecomponent.$set(stagedfilecomponent_changes); - }, - i(local) { - if (current) - return; - transition_in(stagedfilecomponent.$$.fragment, local); - current = true; - }, - o(local) { - transition_out(stagedfilecomponent.$$.fragment, local); - current = false; - }, - d(detaching) { - destroy_component(stagedfilecomponent, detaching); - } - }; -} -function create_each_block4(ctx) { - let current_block_type_index; - let if_block; - let if_block_anchor; - let current; - const if_block_creators = [create_if_block7, create_else_block3]; - const if_blocks = []; - function select_block_type(ctx2, dirty) { - if ( - /*entity*/ - ctx2[15].data - ) - return 0; - return 1; - } - current_block_type_index = select_block_type(ctx, -1); - if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx); - return { - c() { - if_block.c(); - if_block_anchor = empty(); - }, - m(target, anchor) { - if_blocks[current_block_type_index].m(target, anchor); - insert(target, if_block_anchor, anchor); - current = true; - }, - p(ctx2, dirty) { - let previous_block_index = current_block_type_index; - current_block_type_index = select_block_type(ctx2, dirty); - if (current_block_type_index === previous_block_index) { - if_blocks[current_block_type_index].p(ctx2, dirty); - } else { - group_outros(); - transition_out(if_blocks[previous_block_index], 1, 1, () => { - if_blocks[previous_block_index] = null; - }); - check_outros(); - if_block = if_blocks[current_block_type_index]; - if (!if_block) { - if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx2); - if_block.c(); - } else { - if_block.p(ctx2, dirty); - } - transition_in(if_block, 1); - if_block.m(if_block_anchor.parentNode, if_block_anchor); - } - }, - i(local) { - if (current) - return; - transition_in(if_block); - current = true; - }, - o(local) { - transition_out(if_block); - current = false; - }, - d(detaching) { - if (detaching) { - detach(if_block_anchor); - } - if_blocks[current_block_type_index].d(detaching); - } - }; -} -function create_fragment8(ctx) { - let main; - let current; - let each_value = ensure_array_like( - /*hierarchy*/ - ctx[0].children - ); - let each_blocks = []; - for (let i = 0; i < each_value.length; i += 1) { - each_blocks[i] = create_each_block4(get_each_context4(ctx, each_value, i)); - } - const out = (i) => transition_out(each_blocks[i], 1, 1, () => { - each_blocks[i] = null; - }); - return { - c() { - main = element("main"); - for (let i = 0; i < each_blocks.length; i += 1) { - each_blocks[i].c(); - } - attr(main, "class", "svelte-hup5mn"); - toggle_class( - main, - "topLevel", - /*topLevel*/ - ctx[4] - ); - }, - m(target, anchor) { - insert(target, main, anchor); - for (let i = 0; i < each_blocks.length; i += 1) { - if (each_blocks[i]) { - each_blocks[i].m(main, null); - } - } - current = true; - }, - p(ctx2, [dirty]) { - if (dirty & /*hierarchy, plugin, view, fileType, closed, fold, side, unstage, stage, discard*/ - 2031) { - each_value = ensure_array_like( - /*hierarchy*/ - ctx2[0].children - ); - let i; - for (i = 0; i < each_value.length; i += 1) { - const child_ctx = get_each_context4(ctx2, each_value, i); - if (each_blocks[i]) { - each_blocks[i].p(child_ctx, dirty); - transition_in(each_blocks[i], 1); - } else { - each_blocks[i] = create_each_block4(child_ctx); - each_blocks[i].c(); - transition_in(each_blocks[i], 1); - each_blocks[i].m(main, null); - } - } - group_outros(); - for (i = each_value.length; i < each_blocks.length; i += 1) { - out(i); - } - check_outros(); - } - if (!current || dirty & /*topLevel*/ - 16) { - toggle_class( - main, - "topLevel", - /*topLevel*/ - ctx2[4] - ); - } - }, - i(local) { - if (current) - return; - for (let i = 0; i < each_value.length; i += 1) { - transition_in(each_blocks[i]); - } - current = true; - }, - o(local) { - each_blocks = each_blocks.filter(Boolean); - for (let i = 0; i < each_blocks.length; i += 1) { - transition_out(each_blocks[i]); - } - current = false; - }, - d(detaching) { - if (detaching) { - detach(main); - } - destroy_each(each_blocks, detaching); - } - }; -} -function instance8($$self, $$props, $$invalidate) { - let side; - let { hierarchy } = $$props; - let { plugin } = $$props; - let { view } = $$props; - let { fileType } = $$props; - let { topLevel = false } = $$props; - const closed = {}; - function stage(path2) { - plugin.gitManager.stageAll({ dir: path2 }).finally(() => { - dispatchEvent(new CustomEvent("git-refresh")); - }); - } - function unstage(path2) { - plugin.gitManager.unstageAll({ dir: path2 }).finally(() => { - dispatchEvent(new CustomEvent("git-refresh")); - }); - } - function discard(item) { - new DiscardModal(view.app, false, item.vaultPath).myOpen().then((shouldDiscard) => { - if (shouldDiscard === true) { - plugin.gitManager.discardAll({ - dir: item.path, - status: plugin.cachedStatus - }).finally(() => { - dispatchEvent(new CustomEvent("git-refresh")); - }); - } - }); - } - function fold(item) { - $$invalidate(5, closed[item.title] = !closed[item.title], closed); - } - const click_handler = (entity) => unstage(entity.path); - const click_handler_1 = (entity) => discard(entity); - const click_handler_2 = (entity) => stage(entity.path); - const click_handler_3 = (entity) => fold(entity); - $$self.$$set = ($$props2) => { - if ("hierarchy" in $$props2) - $$invalidate(0, hierarchy = $$props2.hierarchy); - if ("plugin" in $$props2) - $$invalidate(1, plugin = $$props2.plugin); - if ("view" in $$props2) - $$invalidate(2, view = $$props2.view); - if ("fileType" in $$props2) - $$invalidate(3, fileType = $$props2.fileType); - if ("topLevel" in $$props2) - $$invalidate(4, topLevel = $$props2.topLevel); - }; - $$self.$$.update = () => { - if ($$self.$$.dirty & /*view*/ - 4) { - $: - $$invalidate(6, side = view.leaf.getRoot().side == "left" ? "right" : "left"); - } - }; - return [ - hierarchy, - plugin, - view, - fileType, - topLevel, - closed, - side, - stage, - unstage, - discard, - fold, - click_handler, - click_handler_1, - click_handler_2, - click_handler_3 - ]; -} -var TreeComponent = class extends SvelteComponent { - constructor(options) { - super(); - init2( - this, - options, - instance8, - create_fragment8, - safe_not_equal, - { - hierarchy: 0, - plugin: 1, - view: 2, - fileType: 3, - topLevel: 4 - }, - add_css6 - ); - } -}; -var treeComponent_default = TreeComponent; - -// src/ui/sourceControl/sourceControl.svelte -function add_css7(target) { - append_styles(target, "svelte-11adhly", `.commit-msg-input.svelte-11adhly.svelte-11adhly{width:100%;overflow:hidden;resize:none;padding:7px 5px;background-color:var(--background-modifier-form-field)}.git-commit-msg.svelte-11adhly.svelte-11adhly{position:relative;padding:0;width:calc(100% - var(--size-4-8));margin:4px auto}main.svelte-11adhly .git-tools .files-count.svelte-11adhly{padding-left:var(--size-2-1);width:11px;display:flex;align-items:center;justify-content:center}.nav-folder-title.svelte-11adhly.svelte-11adhly{align-items:center}.git-commit-msg-clear-button.svelte-11adhly.svelte-11adhly{position:absolute;background:transparent;border-radius:50%;color:var(--search-clear-button-color);cursor:var(--cursor);top:-4px;right:2px;bottom:0px;line-height:0;height:var(--input-height);width:28px;margin:auto;padding:0 0;text-align:center;display:flex;justify-content:center;align-items:center;transition:color 0.15s ease-in-out}.git-commit-msg-clear-button.svelte-11adhly.svelte-11adhly:after{content:"";height:var(--search-clear-button-size);width:var(--search-clear-button-size);display:block;background-color:currentColor;mask-image:url("data:image/svg+xml,");mask-repeat:no-repeat;-webkit-mask-image:url("data:image/svg+xml,");-webkit-mask-repeat:no-repeat}`); -} -function get_each_context5(ctx, list, i) { - const child_ctx = ctx.slice(); - child_ctx[40] = list[i]; - return child_ctx; -} -function get_each_context_1(ctx, list, i) { - const child_ctx = ctx.slice(); - child_ctx[40] = list[i]; - return child_ctx; -} -function get_each_context_2(ctx, list, i) { - const child_ctx = ctx.slice(); - child_ctx[45] = list[i]; - return child_ctx; -} -function create_if_block_8(ctx) { - let div; - let div_aria_label_value; - let mounted; - let dispose; - return { - c() { - div = element("div"); - attr(div, "class", "git-commit-msg-clear-button svelte-11adhly"); - attr(div, "aria-label", div_aria_label_value = "Clear"); - }, - m(target, anchor) { - insert(target, div, anchor); - if (!mounted) { - dispose = listen( - div, - "click", - /*click_handler_1*/ - ctx[33] - ); - mounted = true; - } - }, - p: noop, - d(detaching) { - if (detaching) { - detach(div); - } - mounted = false; - dispose(); - } - }; -} -function create_if_block8(ctx) { - let div18; - let div17; - let div7; - let div6; - let div0; - let t0; - let div1; - let t2; - let div5; - let div3; - let div2; - let t3; - let div4; - let t4_value = ( - /*status*/ - ctx[6].staged.length + "" - ); - let t4; - let t5; - let t6; - let div16; - let div15; - let div8; - let t7; - let div9; - let t9; - let div14; - let div12; - let div10; - let t10; - let div11; - let t11; - let div13; - let t12_value = ( - /*status*/ - ctx[6].changed.length + "" - ); - let t12; - let t13; - let t14; - let current; - let mounted; - let dispose; - let if_block0 = ( - /*stagedOpen*/ - ctx[13] && create_if_block_6(ctx) - ); - let if_block1 = ( - /*changesOpen*/ - ctx[12] && create_if_block_43(ctx) - ); - let if_block2 = ( - /*lastPulledFiles*/ - ctx[7].length > 0 && create_if_block_14(ctx) - ); - return { - c() { - div18 = element("div"); - div17 = element("div"); - div7 = element("div"); - div6 = element("div"); - div0 = element("div"); - div0.innerHTML = ``; - t0 = space(); - div1 = element("div"); - div1.textContent = "Staged Changes"; - t2 = space(); - div5 = element("div"); - div3 = element("div"); - div2 = element("div"); - div2.innerHTML = ``; - t3 = space(); - div4 = element("div"); - t4 = text(t4_value); - t5 = space(); - if (if_block0) - if_block0.c(); - t6 = space(); - div16 = element("div"); - div15 = element("div"); - div8 = element("div"); - div8.innerHTML = ``; - t7 = space(); - div9 = element("div"); - div9.textContent = "Changes"; - t9 = space(); - div14 = element("div"); - div12 = element("div"); - div10 = element("div"); - div10.innerHTML = ``; - t10 = space(); - div11 = element("div"); - div11.innerHTML = ``; - t11 = space(); - div13 = element("div"); - t12 = text(t12_value); - t13 = space(); - if (if_block1) - if_block1.c(); - t14 = space(); - if (if_block2) - if_block2.c(); - attr(div0, "class", "tree-item-icon nav-folder-collapse-indicator collapse-icon"); - toggle_class(div0, "is-collapsed", !/*stagedOpen*/ - ctx[13]); - attr(div1, "class", "tree-item-inner nav-folder-title-content"); - attr(div2, "data-icon", "minus"); - attr(div2, "aria-label", "Unstage"); - attr(div2, "class", "clickable-icon"); - attr(div3, "class", "buttons"); - attr(div4, "class", "files-count svelte-11adhly"); - attr(div5, "class", "git-tools"); - attr(div6, "class", "tree-item-self is-clickable nav-folder-title svelte-11adhly"); - attr(div7, "class", "staged tree-item nav-folder"); - toggle_class(div7, "is-collapsed", !/*stagedOpen*/ - ctx[13]); - attr(div8, "class", "tree-item-icon nav-folder-collapse-indicator collapse-icon"); - toggle_class(div8, "is-collapsed", !/*changesOpen*/ - ctx[12]); - attr(div9, "class", "tree-item-inner nav-folder-title-content"); - attr(div10, "data-icon", "undo"); - attr(div10, "aria-label", "Discard"); - attr(div10, "class", "clickable-icon"); - attr(div11, "data-icon", "plus"); - attr(div11, "aria-label", "Stage"); - attr(div11, "class", "clickable-icon"); - attr(div12, "class", "buttons"); - attr(div13, "class", "files-count svelte-11adhly"); - attr(div14, "class", "git-tools"); - attr(div15, "class", "tree-item-self is-clickable nav-folder-title svelte-11adhly"); - attr(div16, "class", "changes tree-item nav-folder"); - toggle_class(div16, "is-collapsed", !/*changesOpen*/ - ctx[12]); - attr(div17, "class", "tree-item-children nav-folder-children"); - attr(div18, "class", "tree-item nav-folder mod-root"); - }, - m(target, anchor) { - insert(target, div18, anchor); - append2(div18, div17); - append2(div17, div7); - append2(div7, div6); - append2(div6, div0); - append2(div6, t0); - append2(div6, div1); - append2(div6, t2); - append2(div6, div5); - append2(div5, div3); - append2(div3, div2); - ctx[34](div2); - append2(div5, t3); - append2(div5, div4); - append2(div4, t4); - append2(div7, t5); - if (if_block0) - if_block0.m(div7, null); - append2(div17, t6); - append2(div17, div16); - append2(div16, div15); - append2(div15, div8); - append2(div15, t7); - append2(div15, div9); - append2(div15, t9); - append2(div15, div14); - append2(div14, div12); - append2(div12, div10); - append2(div12, t10); - append2(div12, div11); - ctx[36](div11); - append2(div14, t11); - append2(div14, div13); - append2(div13, t12); - append2(div16, t13); - if (if_block1) - if_block1.m(div16, null); - append2(div17, t14); - if (if_block2) - if_block2.m(div17, null); - current = true; - if (!mounted) { - dispose = [ - listen(div2, "click", stop_propagation( - /*unstageAll*/ - ctx[19] - )), - listen( - div6, - "click", - /*click_handler_2*/ - ctx[35] - ), - listen(div10, "click", stop_propagation( - /*discard*/ - ctx[22] - )), - listen(div11, "click", stop_propagation( - /*stageAll*/ - ctx[18] - )), - listen( - div15, - "click", - /*click_handler_3*/ - ctx[37] - ) - ]; - mounted = true; - } - }, - p(ctx2, dirty) { - if (!current || dirty[0] & /*stagedOpen*/ - 8192) { - toggle_class(div0, "is-collapsed", !/*stagedOpen*/ - ctx2[13]); - } - if ((!current || dirty[0] & /*status*/ - 64) && t4_value !== (t4_value = /*status*/ - ctx2[6].staged.length + "")) - set_data(t4, t4_value); - if ( - /*stagedOpen*/ - ctx2[13] - ) { - if (if_block0) { - if_block0.p(ctx2, dirty); - if (dirty[0] & /*stagedOpen*/ - 8192) { - transition_in(if_block0, 1); - } - } else { - if_block0 = create_if_block_6(ctx2); - if_block0.c(); - transition_in(if_block0, 1); - if_block0.m(div7, null); - } - } else if (if_block0) { - group_outros(); - transition_out(if_block0, 1, 1, () => { - if_block0 = null; - }); - check_outros(); - } - if (!current || dirty[0] & /*stagedOpen*/ - 8192) { - toggle_class(div7, "is-collapsed", !/*stagedOpen*/ - ctx2[13]); - } - if (!current || dirty[0] & /*changesOpen*/ - 4096) { - toggle_class(div8, "is-collapsed", !/*changesOpen*/ - ctx2[12]); - } - if ((!current || dirty[0] & /*status*/ - 64) && t12_value !== (t12_value = /*status*/ - ctx2[6].changed.length + "")) - set_data(t12, t12_value); - if ( - /*changesOpen*/ - ctx2[12] - ) { - if (if_block1) { - if_block1.p(ctx2, dirty); - if (dirty[0] & /*changesOpen*/ - 4096) { - transition_in(if_block1, 1); - } - } else { - if_block1 = create_if_block_43(ctx2); - if_block1.c(); - transition_in(if_block1, 1); - if_block1.m(div16, null); - } - } else if (if_block1) { - group_outros(); - transition_out(if_block1, 1, 1, () => { - if_block1 = null; - }); - check_outros(); - } - if (!current || dirty[0] & /*changesOpen*/ - 4096) { - toggle_class(div16, "is-collapsed", !/*changesOpen*/ - ctx2[12]); - } - if ( - /*lastPulledFiles*/ - ctx2[7].length > 0 - ) { - if (if_block2) { - if_block2.p(ctx2, dirty); - if (dirty[0] & /*lastPulledFiles*/ - 128) { - transition_in(if_block2, 1); - } - } else { - if_block2 = create_if_block_14(ctx2); - if_block2.c(); - transition_in(if_block2, 1); - if_block2.m(div17, null); - } - } else if (if_block2) { - group_outros(); - transition_out(if_block2, 1, 1, () => { - if_block2 = null; - }); - check_outros(); - } - }, - i(local) { - if (current) - return; - transition_in(if_block0); - transition_in(if_block1); - transition_in(if_block2); - current = true; - }, - o(local) { - transition_out(if_block0); - transition_out(if_block1); - transition_out(if_block2); - current = false; - }, - d(detaching) { - if (detaching) { - detach(div18); - } - ctx[34](null); - if (if_block0) - if_block0.d(); - ctx[36](null); - if (if_block1) - if_block1.d(); - if (if_block2) - if_block2.d(); - mounted = false; - run_all(dispose); - } - }; -} -function create_if_block_6(ctx) { - let div; - let current_block_type_index; - let if_block; - let div_transition; - let current; - const if_block_creators = [create_if_block_7, create_else_block_2]; - const if_blocks = []; - function select_block_type(ctx2, dirty) { - if ( - /*showTree*/ - ctx2[3] - ) - return 0; - return 1; - } - current_block_type_index = select_block_type(ctx, [-1, -1]); - if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx); - return { - c() { - div = element("div"); - if_block.c(); - attr(div, "class", "tree-item-children nav-folder-children"); - }, - m(target, anchor) { - insert(target, div, anchor); - if_blocks[current_block_type_index].m(div, null); - current = true; - }, - p(ctx2, dirty) { - let previous_block_index = current_block_type_index; - current_block_type_index = select_block_type(ctx2, dirty); - if (current_block_type_index === previous_block_index) { - if_blocks[current_block_type_index].p(ctx2, dirty); - } else { - group_outros(); - transition_out(if_blocks[previous_block_index], 1, 1, () => { - if_blocks[previous_block_index] = null; - }); - check_outros(); - if_block = if_blocks[current_block_type_index]; - if (!if_block) { - if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx2); - if_block.c(); - } else { - if_block.p(ctx2, dirty); - } - transition_in(if_block, 1); - if_block.m(div, null); - } - }, - i(local) { - if (current) - return; - transition_in(if_block); - if (local) { - add_render_callback(() => { - if (!current) - return; - if (!div_transition) - div_transition = create_bidirectional_transition(div, slide, { duration: 150 }, true); - div_transition.run(1); - }); - } - current = true; - }, - o(local) { - transition_out(if_block); - if (local) { - if (!div_transition) - div_transition = create_bidirectional_transition(div, slide, { duration: 150 }, false); - div_transition.run(0); - } - current = false; - }, - d(detaching) { - if (detaching) { - detach(div); - } - if_blocks[current_block_type_index].d(); - if (detaching && div_transition) - div_transition.end(); - } - }; -} -function create_else_block_2(ctx) { - let each_1_anchor; - let current; - let each_value_2 = ensure_array_like( - /*status*/ - ctx[6].staged - ); - let each_blocks = []; - for (let i = 0; i < each_value_2.length; i += 1) { - each_blocks[i] = create_each_block_2(get_each_context_2(ctx, each_value_2, i)); - } - const out = (i) => transition_out(each_blocks[i], 1, 1, () => { - each_blocks[i] = null; - }); - return { - c() { - for (let i = 0; i < each_blocks.length; i += 1) { - each_blocks[i].c(); - } - each_1_anchor = empty(); - }, - m(target, anchor) { - for (let i = 0; i < each_blocks.length; i += 1) { - if (each_blocks[i]) { - each_blocks[i].m(target, anchor); - } - } - insert(target, each_1_anchor, anchor); - current = true; - }, - p(ctx2, dirty) { - if (dirty[0] & /*status, view, plugin*/ - 67) { - each_value_2 = ensure_array_like( - /*status*/ - ctx2[6].staged - ); - let i; - for (i = 0; i < each_value_2.length; i += 1) { - const child_ctx = get_each_context_2(ctx2, each_value_2, i); - if (each_blocks[i]) { - each_blocks[i].p(child_ctx, dirty); - transition_in(each_blocks[i], 1); - } else { - each_blocks[i] = create_each_block_2(child_ctx); - each_blocks[i].c(); - transition_in(each_blocks[i], 1); - each_blocks[i].m(each_1_anchor.parentNode, each_1_anchor); - } - } - group_outros(); - for (i = each_value_2.length; i < each_blocks.length; i += 1) { - out(i); - } - check_outros(); - } - }, - i(local) { - if (current) - return; - for (let i = 0; i < each_value_2.length; i += 1) { - transition_in(each_blocks[i]); - } - current = true; - }, - o(local) { - each_blocks = each_blocks.filter(Boolean); - for (let i = 0; i < each_blocks.length; i += 1) { - transition_out(each_blocks[i]); - } - current = false; - }, - d(detaching) { - if (detaching) { - detach(each_1_anchor); - } - destroy_each(each_blocks, detaching); - } - }; -} -function create_if_block_7(ctx) { - let treecomponent; - let current; - treecomponent = new treeComponent_default({ - props: { - hierarchy: ( - /*stagedHierarchy*/ - ctx[10] - ), - plugin: ( - /*plugin*/ - ctx[0] - ), - view: ( - /*view*/ - ctx[1] - ), - fileType: 0 /* staged */, - topLevel: true - } - }); - return { - c() { - create_component(treecomponent.$$.fragment); - }, - m(target, anchor) { - mount_component(treecomponent, target, anchor); - current = true; - }, - p(ctx2, dirty) { - const treecomponent_changes = {}; - if (dirty[0] & /*stagedHierarchy*/ - 1024) - treecomponent_changes.hierarchy = /*stagedHierarchy*/ - ctx2[10]; - if (dirty[0] & /*plugin*/ - 1) - treecomponent_changes.plugin = /*plugin*/ - ctx2[0]; - if (dirty[0] & /*view*/ - 2) - treecomponent_changes.view = /*view*/ - ctx2[1]; - treecomponent.$set(treecomponent_changes); - }, - i(local) { - if (current) - return; - transition_in(treecomponent.$$.fragment, local); - current = true; - }, - o(local) { - transition_out(treecomponent.$$.fragment, local); - current = false; - }, - d(detaching) { - destroy_component(treecomponent, detaching); - } - }; -} -function create_each_block_2(ctx) { - let stagedfilecomponent; - let current; - stagedfilecomponent = new stagedFileComponent_default({ - props: { - change: ( - /*stagedFile*/ - ctx[45] - ), - view: ( - /*view*/ - ctx[1] - ), - manager: ( - /*plugin*/ - ctx[0].gitManager - ) - } - }); - return { - c() { - create_component(stagedfilecomponent.$$.fragment); - }, - m(target, anchor) { - mount_component(stagedfilecomponent, target, anchor); - current = true; - }, - p(ctx2, dirty) { - const stagedfilecomponent_changes = {}; - if (dirty[0] & /*status*/ - 64) - stagedfilecomponent_changes.change = /*stagedFile*/ - ctx2[45]; - if (dirty[0] & /*view*/ - 2) - stagedfilecomponent_changes.view = /*view*/ - ctx2[1]; - if (dirty[0] & /*plugin*/ - 1) - stagedfilecomponent_changes.manager = /*plugin*/ - ctx2[0].gitManager; - stagedfilecomponent.$set(stagedfilecomponent_changes); - }, - i(local) { - if (current) - return; - transition_in(stagedfilecomponent.$$.fragment, local); - current = true; - }, - o(local) { - transition_out(stagedfilecomponent.$$.fragment, local); - current = false; - }, - d(detaching) { - destroy_component(stagedfilecomponent, detaching); - } - }; -} -function create_if_block_43(ctx) { - let div; - let current_block_type_index; - let if_block; - let div_transition; - let current; - const if_block_creators = [create_if_block_52, create_else_block_12]; - const if_blocks = []; - function select_block_type_1(ctx2, dirty) { - if ( - /*showTree*/ - ctx2[3] - ) - return 0; - return 1; - } - current_block_type_index = select_block_type_1(ctx, [-1, -1]); - if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx); - return { - c() { - div = element("div"); - if_block.c(); - attr(div, "class", "tree-item-children nav-folder-children"); - }, - m(target, anchor) { - insert(target, div, anchor); - if_blocks[current_block_type_index].m(div, null); - current = true; - }, - p(ctx2, dirty) { - let previous_block_index = current_block_type_index; - current_block_type_index = select_block_type_1(ctx2, dirty); - if (current_block_type_index === previous_block_index) { - if_blocks[current_block_type_index].p(ctx2, dirty); - } else { - group_outros(); - transition_out(if_blocks[previous_block_index], 1, 1, () => { - if_blocks[previous_block_index] = null; - }); - check_outros(); - if_block = if_blocks[current_block_type_index]; - if (!if_block) { - if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx2); - if_block.c(); - } else { - if_block.p(ctx2, dirty); - } - transition_in(if_block, 1); - if_block.m(div, null); - } - }, - i(local) { - if (current) - return; - transition_in(if_block); - if (local) { - add_render_callback(() => { - if (!current) - return; - if (!div_transition) - div_transition = create_bidirectional_transition(div, slide, { duration: 150 }, true); - div_transition.run(1); - }); - } - current = true; - }, - o(local) { - transition_out(if_block); - if (local) { - if (!div_transition) - div_transition = create_bidirectional_transition(div, slide, { duration: 150 }, false); - div_transition.run(0); - } - current = false; - }, - d(detaching) { - if (detaching) { - detach(div); - } - if_blocks[current_block_type_index].d(); - if (detaching && div_transition) - div_transition.end(); - } - }; -} -function create_else_block_12(ctx) { - let each_1_anchor; - let current; - let each_value_1 = ensure_array_like( - /*status*/ - ctx[6].changed - ); - let each_blocks = []; - for (let i = 0; i < each_value_1.length; i += 1) { - each_blocks[i] = create_each_block_1(get_each_context_1(ctx, each_value_1, i)); - } - const out = (i) => transition_out(each_blocks[i], 1, 1, () => { - each_blocks[i] = null; - }); - return { - c() { - for (let i = 0; i < each_blocks.length; i += 1) { - each_blocks[i].c(); - } - each_1_anchor = empty(); - }, - m(target, anchor) { - for (let i = 0; i < each_blocks.length; i += 1) { - if (each_blocks[i]) { - each_blocks[i].m(target, anchor); - } - } - insert(target, each_1_anchor, anchor); - current = true; - }, - p(ctx2, dirty) { - if (dirty[0] & /*status, view, plugin*/ - 67) { - each_value_1 = ensure_array_like( - /*status*/ - ctx2[6].changed - ); - let i; - for (i = 0; i < each_value_1.length; i += 1) { - const child_ctx = get_each_context_1(ctx2, each_value_1, i); - if (each_blocks[i]) { - each_blocks[i].p(child_ctx, dirty); - transition_in(each_blocks[i], 1); - } else { - each_blocks[i] = create_each_block_1(child_ctx); - each_blocks[i].c(); - transition_in(each_blocks[i], 1); - each_blocks[i].m(each_1_anchor.parentNode, each_1_anchor); - } - } - group_outros(); - for (i = each_value_1.length; i < each_blocks.length; i += 1) { - out(i); - } - check_outros(); - } - }, - i(local) { - if (current) - return; - for (let i = 0; i < each_value_1.length; i += 1) { - transition_in(each_blocks[i]); - } - current = true; - }, - o(local) { - each_blocks = each_blocks.filter(Boolean); - for (let i = 0; i < each_blocks.length; i += 1) { - transition_out(each_blocks[i]); - } - current = false; - }, - d(detaching) { - if (detaching) { - detach(each_1_anchor); - } - destroy_each(each_blocks, detaching); - } - }; -} -function create_if_block_52(ctx) { - let treecomponent; - let current; - treecomponent = new treeComponent_default({ - props: { - hierarchy: ( - /*changeHierarchy*/ - ctx[9] - ), - plugin: ( - /*plugin*/ - ctx[0] - ), - view: ( - /*view*/ - ctx[1] - ), - fileType: 1 /* changed */, - topLevel: true - } - }); - return { - c() { - create_component(treecomponent.$$.fragment); - }, - m(target, anchor) { - mount_component(treecomponent, target, anchor); - current = true; - }, - p(ctx2, dirty) { - const treecomponent_changes = {}; - if (dirty[0] & /*changeHierarchy*/ - 512) - treecomponent_changes.hierarchy = /*changeHierarchy*/ - ctx2[9]; - if (dirty[0] & /*plugin*/ - 1) - treecomponent_changes.plugin = /*plugin*/ - ctx2[0]; - if (dirty[0] & /*view*/ - 2) - treecomponent_changes.view = /*view*/ - ctx2[1]; - treecomponent.$set(treecomponent_changes); - }, - i(local) { - if (current) - return; - transition_in(treecomponent.$$.fragment, local); - current = true; - }, - o(local) { - transition_out(treecomponent.$$.fragment, local); - current = false; - }, - d(detaching) { - destroy_component(treecomponent, detaching); - } - }; -} -function create_each_block_1(ctx) { - let filecomponent; - let current; - filecomponent = new fileComponent_default({ - props: { - change: ( - /*change*/ - ctx[40] - ), - view: ( - /*view*/ - ctx[1] - ), - manager: ( - /*plugin*/ - ctx[0].gitManager - ) - } - }); - filecomponent.$on("git-refresh", triggerRefresh2); - return { - c() { - create_component(filecomponent.$$.fragment); - }, - m(target, anchor) { - mount_component(filecomponent, target, anchor); - current = true; - }, - p(ctx2, dirty) { - const filecomponent_changes = {}; - if (dirty[0] & /*status*/ - 64) - filecomponent_changes.change = /*change*/ - ctx2[40]; - if (dirty[0] & /*view*/ - 2) - filecomponent_changes.view = /*view*/ - ctx2[1]; - if (dirty[0] & /*plugin*/ - 1) - filecomponent_changes.manager = /*plugin*/ - ctx2[0].gitManager; - filecomponent.$set(filecomponent_changes); - }, - i(local) { - if (current) - return; - transition_in(filecomponent.$$.fragment, local); - current = true; - }, - o(local) { - transition_out(filecomponent.$$.fragment, local); - current = false; - }, - d(detaching) { - destroy_component(filecomponent, detaching); - } - }; -} -function create_if_block_14(ctx) { - let div3; - let div2; - let div0; - let t0; - let div1; - let t2; - let span; - let t3_value = ( - /*lastPulledFiles*/ - ctx[7].length + "" - ); - let t3; - let t4; - let current; - let mounted; - let dispose; - let if_block = ( - /*lastPulledFilesOpen*/ - ctx[14] && create_if_block_23(ctx) - ); - return { - c() { - div3 = element("div"); - div2 = element("div"); - div0 = element("div"); - div0.innerHTML = ``; - t0 = space(); - div1 = element("div"); - div1.textContent = "Recently Pulled Files"; - t2 = space(); - span = element("span"); - t3 = text(t3_value); - t4 = space(); - if (if_block) - if_block.c(); - attr(div0, "class", "tree-item-icon nav-folder-collapse-indicator collapse-icon"); - attr(div1, "class", "tree-item-inner nav-folder-title-content"); - attr(span, "class", "tree-item-flair"); - attr(div2, "class", "tree-item-self is-clickable nav-folder-title svelte-11adhly"); - attr(div3, "class", "pulled nav-folder"); - toggle_class(div3, "is-collapsed", !/*lastPulledFilesOpen*/ - ctx[14]); - }, - m(target, anchor) { - insert(target, div3, anchor); - append2(div3, div2); - append2(div2, div0); - append2(div2, t0); - append2(div2, div1); - append2(div2, t2); - append2(div2, span); - append2(span, t3); - append2(div3, t4); - if (if_block) - if_block.m(div3, null); - current = true; - if (!mounted) { - dispose = listen( - div2, - "click", - /*click_handler_4*/ - ctx[38] - ); - mounted = true; - } - }, - p(ctx2, dirty) { - if ((!current || dirty[0] & /*lastPulledFiles*/ - 128) && t3_value !== (t3_value = /*lastPulledFiles*/ - ctx2[7].length + "")) - set_data(t3, t3_value); - if ( - /*lastPulledFilesOpen*/ - ctx2[14] - ) { - if (if_block) { - if_block.p(ctx2, dirty); - if (dirty[0] & /*lastPulledFilesOpen*/ - 16384) { - transition_in(if_block, 1); - } - } else { - if_block = create_if_block_23(ctx2); - if_block.c(); - transition_in(if_block, 1); - if_block.m(div3, null); - } - } else if (if_block) { - group_outros(); - transition_out(if_block, 1, 1, () => { - if_block = null; - }); - check_outros(); - } - if (!current || dirty[0] & /*lastPulledFilesOpen*/ - 16384) { - toggle_class(div3, "is-collapsed", !/*lastPulledFilesOpen*/ - ctx2[14]); - } - }, - i(local) { - if (current) - return; - transition_in(if_block); - current = true; - }, - o(local) { - transition_out(if_block); - current = false; - }, - d(detaching) { - if (detaching) { - detach(div3); - } - if (if_block) - if_block.d(); - mounted = false; - dispose(); - } - }; -} -function create_if_block_23(ctx) { - let div; - let current_block_type_index; - let if_block; - let div_transition; - let current; - const if_block_creators = [create_if_block_33, create_else_block4]; - const if_blocks = []; - function select_block_type_2(ctx2, dirty) { - if ( - /*showTree*/ - ctx2[3] - ) - return 0; - return 1; - } - current_block_type_index = select_block_type_2(ctx, [-1, -1]); - if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx); - return { - c() { - div = element("div"); - if_block.c(); - attr(div, "class", "tree-item-children nav-folder-children"); - }, - m(target, anchor) { - insert(target, div, anchor); - if_blocks[current_block_type_index].m(div, null); - current = true; - }, - p(ctx2, dirty) { - let previous_block_index = current_block_type_index; - current_block_type_index = select_block_type_2(ctx2, dirty); - if (current_block_type_index === previous_block_index) { - if_blocks[current_block_type_index].p(ctx2, dirty); - } else { - group_outros(); - transition_out(if_blocks[previous_block_index], 1, 1, () => { - if_blocks[previous_block_index] = null; - }); - check_outros(); - if_block = if_blocks[current_block_type_index]; - if (!if_block) { - if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx2); - if_block.c(); - } else { - if_block.p(ctx2, dirty); - } - transition_in(if_block, 1); - if_block.m(div, null); - } - }, - i(local) { - if (current) - return; - transition_in(if_block); - if (local) { - add_render_callback(() => { - if (!current) - return; - if (!div_transition) - div_transition = create_bidirectional_transition(div, slide, { duration: 150 }, true); - div_transition.run(1); - }); - } - current = true; - }, - o(local) { - transition_out(if_block); - if (local) { - if (!div_transition) - div_transition = create_bidirectional_transition(div, slide, { duration: 150 }, false); - div_transition.run(0); - } - current = false; - }, - d(detaching) { - if (detaching) { - detach(div); - } - if_blocks[current_block_type_index].d(); - if (detaching && div_transition) - div_transition.end(); - } - }; -} -function create_else_block4(ctx) { - let each_1_anchor; - let current; - let each_value = ensure_array_like( - /*lastPulledFiles*/ - ctx[7] - ); - let each_blocks = []; - for (let i = 0; i < each_value.length; i += 1) { - each_blocks[i] = create_each_block5(get_each_context5(ctx, each_value, i)); - } - const out = (i) => transition_out(each_blocks[i], 1, 1, () => { - each_blocks[i] = null; - }); - return { - c() { - for (let i = 0; i < each_blocks.length; i += 1) { - each_blocks[i].c(); - } - each_1_anchor = empty(); - }, - m(target, anchor) { - for (let i = 0; i < each_blocks.length; i += 1) { - if (each_blocks[i]) { - each_blocks[i].m(target, anchor); - } - } - insert(target, each_1_anchor, anchor); - current = true; - }, - p(ctx2, dirty) { - if (dirty[0] & /*lastPulledFiles, view*/ - 130) { - each_value = ensure_array_like( - /*lastPulledFiles*/ - ctx2[7] - ); - let i; - for (i = 0; i < each_value.length; i += 1) { - const child_ctx = get_each_context5(ctx2, each_value, i); - if (each_blocks[i]) { - each_blocks[i].p(child_ctx, dirty); - transition_in(each_blocks[i], 1); - } else { - each_blocks[i] = create_each_block5(child_ctx); - each_blocks[i].c(); - transition_in(each_blocks[i], 1); - each_blocks[i].m(each_1_anchor.parentNode, each_1_anchor); - } - } - group_outros(); - for (i = each_value.length; i < each_blocks.length; i += 1) { - out(i); - } - check_outros(); - } - }, - i(local) { - if (current) - return; - for (let i = 0; i < each_value.length; i += 1) { - transition_in(each_blocks[i]); - } - current = true; - }, - o(local) { - each_blocks = each_blocks.filter(Boolean); - for (let i = 0; i < each_blocks.length; i += 1) { - transition_out(each_blocks[i]); - } - current = false; - }, - d(detaching) { - if (detaching) { - detach(each_1_anchor); - } - destroy_each(each_blocks, detaching); - } - }; -} -function create_if_block_33(ctx) { - let treecomponent; - let current; - treecomponent = new treeComponent_default({ - props: { - hierarchy: ( - /*lastPulledFilesHierarchy*/ - ctx[11] - ), - plugin: ( - /*plugin*/ - ctx[0] - ), - view: ( - /*view*/ - ctx[1] - ), - fileType: 2 /* pulled */, - topLevel: true - } - }); - return { - c() { - create_component(treecomponent.$$.fragment); - }, - m(target, anchor) { - mount_component(treecomponent, target, anchor); - current = true; - }, - p(ctx2, dirty) { - const treecomponent_changes = {}; - if (dirty[0] & /*lastPulledFilesHierarchy*/ - 2048) - treecomponent_changes.hierarchy = /*lastPulledFilesHierarchy*/ - ctx2[11]; - if (dirty[0] & /*plugin*/ - 1) - treecomponent_changes.plugin = /*plugin*/ - ctx2[0]; - if (dirty[0] & /*view*/ - 2) - treecomponent_changes.view = /*view*/ - ctx2[1]; - treecomponent.$set(treecomponent_changes); - }, - i(local) { - if (current) - return; - transition_in(treecomponent.$$.fragment, local); - current = true; - }, - o(local) { - transition_out(treecomponent.$$.fragment, local); - current = false; - }, - d(detaching) { - destroy_component(treecomponent, detaching); - } - }; -} -function create_each_block5(ctx) { - let pulledfilecomponent; - let current; - pulledfilecomponent = new pulledFileComponent_default({ - props: { - change: ( - /*change*/ - ctx[40] - ), - view: ( - /*view*/ - ctx[1] - ) - } - }); - pulledfilecomponent.$on("git-refresh", triggerRefresh2); - return { - c() { - create_component(pulledfilecomponent.$$.fragment); - }, - m(target, anchor) { - mount_component(pulledfilecomponent, target, anchor); - current = true; - }, - p(ctx2, dirty) { - const pulledfilecomponent_changes = {}; - if (dirty[0] & /*lastPulledFiles*/ - 128) - pulledfilecomponent_changes.change = /*change*/ - ctx2[40]; - if (dirty[0] & /*view*/ - 2) - pulledfilecomponent_changes.view = /*view*/ - ctx2[1]; - pulledfilecomponent.$set(pulledfilecomponent_changes); - }, - i(local) { - if (current) - return; - transition_in(pulledfilecomponent.$$.fragment, local); - current = true; - }, - o(local) { - transition_out(pulledfilecomponent.$$.fragment, local); - current = false; - }, - d(detaching) { - destroy_component(pulledfilecomponent, detaching); - } - }; -} -function create_fragment9(ctx) { - let main; - let div9; - let div8; - let div0; - let t0; - let div1; - let t1; - let div2; - let t2; - let div3; - let t3; - let div4; - let t4; - let div5; - let t5; - let div6; - let t6; - let div7; - let t7; - let div10; - let textarea; - let t8; - let t9; - let div11; - let main_data_type_value; - let current; - let mounted; - let dispose; - let if_block0 = ( - /*commitMessage*/ - ctx[2] && create_if_block_8(ctx) - ); - let if_block1 = ( - /*status*/ - ctx[6] && /*stagedHierarchy*/ - ctx[10] && /*changeHierarchy*/ - ctx[9] && create_if_block8(ctx) - ); - return { - c() { - main = element("main"); - div9 = element("div"); - div8 = element("div"); - div0 = element("div"); - t0 = space(); - div1 = element("div"); - t1 = space(); - div2 = element("div"); - t2 = space(); - div3 = element("div"); - t3 = space(); - div4 = element("div"); - t4 = space(); - div5 = element("div"); - t5 = space(); - div6 = element("div"); - t6 = space(); - div7 = element("div"); - t7 = space(); - div10 = element("div"); - textarea = element("textarea"); - t8 = space(); - if (if_block0) - if_block0.c(); - t9 = space(); - div11 = element("div"); - if (if_block1) - if_block1.c(); - attr(div0, "id", "backup-btn"); - attr(div0, "data-icon", "arrow-up-circle"); - attr(div0, "class", "clickable-icon nav-action-button"); - attr(div0, "aria-label", "Backup"); - attr(div1, "id", "commit-btn"); - attr(div1, "data-icon", "check"); - attr(div1, "class", "clickable-icon nav-action-button"); - attr(div1, "aria-label", "Commit"); - attr(div2, "id", "stage-all"); - attr(div2, "class", "clickable-icon nav-action-button"); - attr(div2, "data-icon", "plus-circle"); - attr(div2, "aria-label", "Stage all"); - attr(div3, "id", "unstage-all"); - attr(div3, "class", "clickable-icon nav-action-button"); - attr(div3, "data-icon", "minus-circle"); - attr(div3, "aria-label", "Unstage all"); - attr(div4, "id", "push"); - attr(div4, "class", "clickable-icon nav-action-button"); - attr(div4, "data-icon", "upload"); - attr(div4, "aria-label", "Push"); - attr(div5, "id", "pull"); - attr(div5, "class", "clickable-icon nav-action-button"); - attr(div5, "data-icon", "download"); - attr(div5, "aria-label", "Pull"); - attr(div6, "id", "layoutChange"); - attr(div6, "class", "clickable-icon nav-action-button"); - attr(div6, "aria-label", "Change Layout"); - attr(div7, "id", "refresh"); - attr(div7, "class", "clickable-icon nav-action-button"); - attr(div7, "data-icon", "refresh-cw"); - attr(div7, "aria-label", "Refresh"); - set_style(div7, "margin", "1px"); - toggle_class( - div7, - "loading", - /*loading*/ - ctx[5] - ); - attr(div8, "class", "nav-buttons-container"); - attr(div9, "class", "nav-header"); - attr( - textarea, - "rows", - /*rows*/ - ctx[15] - ); - attr(textarea, "class", "commit-msg-input svelte-11adhly"); - attr(textarea, "spellcheck", "true"); - attr(textarea, "placeholder", "Commit Message"); - attr(div10, "class", "git-commit-msg svelte-11adhly"); - attr(div11, "class", "nav-files-container"); - set_style(div11, "position", "relative"); - attr(main, "data-type", main_data_type_value = SOURCE_CONTROL_VIEW_CONFIG.type); - attr(main, "class", "svelte-11adhly"); - }, - m(target, anchor) { - insert(target, main, anchor); - append2(main, div9); - append2(div9, div8); - append2(div8, div0); - ctx[23](div0); - append2(div8, t0); - append2(div8, div1); - ctx[24](div1); - append2(div8, t1); - append2(div8, div2); - ctx[25](div2); - append2(div8, t2); - append2(div8, div3); - ctx[26](div3); - append2(div8, t3); - append2(div8, div4); - ctx[27](div4); - append2(div8, t4); - append2(div8, div5); - ctx[28](div5); - append2(div8, t5); - append2(div8, div6); - ctx[29](div6); - append2(div8, t6); - append2(div8, div7); - ctx[31](div7); - append2(main, t7); - append2(main, div10); - append2(div10, textarea); - set_input_value( - textarea, - /*commitMessage*/ - ctx[2] - ); - append2(div10, t8); - if (if_block0) - if_block0.m(div10, null); - append2(main, t9); - append2(main, div11); - if (if_block1) - if_block1.m(div11, null); - current = true; - if (!mounted) { - dispose = [ - listen( - div0, - "click", - /*backup*/ - ctx[17] - ), - listen( - div1, - "click", - /*commit*/ - ctx[16] - ), - listen( - div2, - "click", - /*stageAll*/ - ctx[18] - ), - listen( - div3, - "click", - /*unstageAll*/ - ctx[19] - ), - listen( - div4, - "click", - /*push*/ - ctx[20] - ), - listen( - div5, - "click", - /*pull*/ - ctx[21] - ), - listen( - div6, - "click", - /*click_handler*/ - ctx[30] - ), - listen(div7, "click", triggerRefresh2), - listen( - textarea, - "input", - /*textarea_input_handler*/ - ctx[32] - ) - ]; - mounted = true; - } - }, - p(ctx2, dirty) { - if (!current || dirty[0] & /*loading*/ - 32) { - toggle_class( - div7, - "loading", - /*loading*/ - ctx2[5] - ); - } - if (!current || dirty[0] & /*rows*/ - 32768) { - attr( - textarea, - "rows", - /*rows*/ - ctx2[15] - ); - } - if (dirty[0] & /*commitMessage*/ - 4) { - set_input_value( - textarea, - /*commitMessage*/ - ctx2[2] - ); - } - if ( - /*commitMessage*/ - ctx2[2] - ) { - if (if_block0) { - if_block0.p(ctx2, dirty); - } else { - if_block0 = create_if_block_8(ctx2); - if_block0.c(); - if_block0.m(div10, null); - } - } else if (if_block0) { - if_block0.d(1); - if_block0 = null; - } - if ( - /*status*/ - ctx2[6] && /*stagedHierarchy*/ - ctx2[10] && /*changeHierarchy*/ - ctx2[9] - ) { - if (if_block1) { - if_block1.p(ctx2, dirty); - if (dirty[0] & /*status, stagedHierarchy, changeHierarchy*/ - 1600) { - transition_in(if_block1, 1); - } - } else { - if_block1 = create_if_block8(ctx2); - if_block1.c(); - transition_in(if_block1, 1); - if_block1.m(div11, null); - } - } else if (if_block1) { - group_outros(); - transition_out(if_block1, 1, 1, () => { - if_block1 = null; - }); - check_outros(); - } - }, - i(local) { - if (current) - return; - transition_in(if_block1); - current = true; - }, - o(local) { - transition_out(if_block1); - current = false; - }, - d(detaching) { - if (detaching) { - detach(main); - } - ctx[23](null); - ctx[24](null); - ctx[25](null); - ctx[26](null); - ctx[27](null); - ctx[28](null); - ctx[29](null); - ctx[31](null); - if (if_block0) - if_block0.d(); - if (if_block1) - if_block1.d(); - mounted = false; - run_all(dispose); - } - }; -} -function triggerRefresh2() { - dispatchEvent(new CustomEvent("git-refresh")); -} -function instance9($$self, $$props, $$invalidate) { - let rows; - let { plugin } = $$props; - let { view } = $$props; - let loading; - let status2; - let lastPulledFiles = []; - let commitMessage = plugin.settings.commitMessage; - let buttons = []; - let changeHierarchy; - let stagedHierarchy; - let lastPulledFilesHierarchy; - let changesOpen = true; - let stagedOpen = true; - let lastPulledFilesOpen = true; - let showTree = plugin.settings.treeStructure; - let layoutBtn; - addEventListener("git-view-refresh", refresh); - plugin.app.workspace.onLayoutReady(() => { - window.setTimeout( - () => { - buttons.forEach((btn) => (0, import_obsidian29.setIcon)(btn, btn.getAttr("data-icon"))); - (0, import_obsidian29.setIcon)(layoutBtn, showTree ? "list" : "folder"); - }, - 0 - ); - }); - onDestroy(() => { - removeEventListener("git-view-refresh", refresh); - }); - function commit2() { - return __awaiter(this, void 0, void 0, function* () { - $$invalidate(5, loading = true); - if (status2) { - if (yield plugin.hasTooBigFiles(status2.staged)) { - plugin.setState(0 /* idle */); - return false; - } - plugin.promiseQueue.addTask(() => plugin.gitManager.commit({ message: commitMessage }).then(() => { - if (commitMessage !== plugin.settings.commitMessage) { - $$invalidate(2, commitMessage = ""); - } - plugin.setUpAutoBackup(); - }).finally(triggerRefresh2)); - } - }); - } - function backup() { - return __awaiter(this, void 0, void 0, function* () { - $$invalidate(5, loading = true); - if (status2) { - plugin.promiseQueue.addTask(() => plugin.createBackup(false, false, commitMessage).then(() => { - if (commitMessage !== plugin.settings.commitMessage) { - $$invalidate(2, commitMessage = ""); - } - }).finally(triggerRefresh2)); - } - }); - } - function refresh() { - return __awaiter(this, void 0, void 0, function* () { - if (!plugin.gitReady) { - $$invalidate(6, status2 = void 0); - return; - } - const unPushedCommits = yield plugin.gitManager.getUnpushedCommits(); - buttons.forEach((btn) => { - var _a2, _b; - if (import_obsidian29.Platform.isMobile) { - btn.removeClass("button-border"); - if (btn.id == "push" && unPushedCommits > 0) { - btn.addClass("button-border"); - } - } else { - (_a2 = btn.firstElementChild) === null || _a2 === void 0 ? void 0 : _a2.removeAttribute("color"); - if (btn.id == "push" && unPushedCommits > 0) { - (_b = btn.firstElementChild) === null || _b === void 0 ? void 0 : _b.setAttr("color", "var(--text-accent)"); - } - } - }); - $$invalidate(6, status2 = plugin.cachedStatus); - if (plugin.lastPulledFiles && plugin.lastPulledFiles != lastPulledFiles) { - $$invalidate(7, lastPulledFiles = plugin.lastPulledFiles); - $$invalidate(11, lastPulledFilesHierarchy = { - title: "", - path: "", - vaultPath: "", - children: plugin.gitManager.getTreeStructure(lastPulledFiles) - }); - } - if (status2) { - const sort = (a, b) => { - return a.vault_path.split("/").last().localeCompare(getDisplayPath(b.vault_path)); - }; - status2.changed.sort(sort); - status2.staged.sort(sort); - if (status2.changed.length + status2.staged.length > 500) { - $$invalidate(6, status2 = void 0); - if (!plugin.loading) { - plugin.displayError("Too many changes to display"); - } - } else { - $$invalidate(9, changeHierarchy = { - title: "", - path: "", - vaultPath: "", - children: plugin.gitManager.getTreeStructure(status2.changed) - }); - $$invalidate(10, stagedHierarchy = { - title: "", - path: "", - vaultPath: "", - children: plugin.gitManager.getTreeStructure(status2.staged) - }); - } - } else { - $$invalidate(9, changeHierarchy = void 0); - $$invalidate(10, stagedHierarchy = void 0); - } - $$invalidate(5, loading = plugin.loading); - }); - } - function stageAll() { - $$invalidate(5, loading = true); - plugin.promiseQueue.addTask(() => plugin.gitManager.stageAll({ status: status2 }).finally(triggerRefresh2)); - } - function unstageAll() { - $$invalidate(5, loading = true); - plugin.promiseQueue.addTask(() => plugin.gitManager.unstageAll({ status: status2 }).finally(triggerRefresh2)); - } - function push2() { - $$invalidate(5, loading = true); - plugin.promiseQueue.addTask(() => plugin.push().finally(triggerRefresh2)); - } - function pull2() { - $$invalidate(5, loading = true); - plugin.promiseQueue.addTask(() => plugin.pullChangesFromRemote().finally(triggerRefresh2)); - } - function discard() { - new DiscardModal(view.app, false, plugin.gitManager.getRelativeVaultPath("/")).myOpen().then((shouldDiscard) => { - if (shouldDiscard === true) { - plugin.promiseQueue.addTask(() => plugin.gitManager.discardAll({ status: plugin.cachedStatus }).finally(() => { - dispatchEvent(new CustomEvent("git-refresh")); - })); - } - }); - } - function div0_binding($$value) { - binding_callbacks[$$value ? "unshift" : "push"](() => { - buttons[5] = $$value; - $$invalidate(8, buttons); - }); - } - function div1_binding($$value) { - binding_callbacks[$$value ? "unshift" : "push"](() => { - buttons[0] = $$value; - $$invalidate(8, buttons); - }); - } - function div2_binding($$value) { - binding_callbacks[$$value ? "unshift" : "push"](() => { - buttons[1] = $$value; - $$invalidate(8, buttons); - }); - } - function div3_binding($$value) { - binding_callbacks[$$value ? "unshift" : "push"](() => { - buttons[2] = $$value; - $$invalidate(8, buttons); - }); - } - function div4_binding($$value) { - binding_callbacks[$$value ? "unshift" : "push"](() => { - buttons[3] = $$value; - $$invalidate(8, buttons); - }); - } - function div5_binding($$value) { - binding_callbacks[$$value ? "unshift" : "push"](() => { - buttons[4] = $$value; - $$invalidate(8, buttons); - }); - } - function div6_binding($$value) { - binding_callbacks[$$value ? "unshift" : "push"](() => { - layoutBtn = $$value; - $$invalidate(4, layoutBtn); - }); - } - const click_handler = () => { - $$invalidate(3, showTree = !showTree); - $$invalidate(0, plugin.settings.treeStructure = showTree, plugin); - plugin.saveSettings(); - }; - function div7_binding($$value) { - binding_callbacks[$$value ? "unshift" : "push"](() => { - buttons[6] = $$value; - $$invalidate(8, buttons); - }); - } - function textarea_input_handler() { - commitMessage = this.value; - $$invalidate(2, commitMessage); - } - const click_handler_1 = () => $$invalidate(2, commitMessage = ""); - function div2_binding_1($$value) { - binding_callbacks[$$value ? "unshift" : "push"](() => { - buttons[8] = $$value; - $$invalidate(8, buttons); - }); - } - const click_handler_2 = () => $$invalidate(13, stagedOpen = !stagedOpen); - function div11_binding($$value) { - binding_callbacks[$$value ? "unshift" : "push"](() => { - buttons[9] = $$value; - $$invalidate(8, buttons); - }); - } - const click_handler_3 = () => $$invalidate(12, changesOpen = !changesOpen); - const click_handler_4 = () => $$invalidate(14, lastPulledFilesOpen = !lastPulledFilesOpen); - $$self.$$set = ($$props2) => { - if ("plugin" in $$props2) - $$invalidate(0, plugin = $$props2.plugin); - if ("view" in $$props2) - $$invalidate(1, view = $$props2.view); - }; - $$self.$$.update = () => { - if ($$self.$$.dirty[0] & /*layoutBtn, showTree*/ - 24) { - $: { - if (layoutBtn) { - layoutBtn.empty(); - (0, import_obsidian29.setIcon)(layoutBtn, showTree ? "list" : "folder"); - } - } - } - if ($$self.$$.dirty[0] & /*commitMessage*/ - 4) { - $: - $$invalidate(15, rows = (commitMessage.match(/\n/g) || []).length + 1 || 1); - } - }; - return [ - plugin, - view, - commitMessage, - showTree, - layoutBtn, - loading, - status2, - lastPulledFiles, - buttons, - changeHierarchy, - stagedHierarchy, - lastPulledFilesHierarchy, - changesOpen, - stagedOpen, - lastPulledFilesOpen, - rows, - commit2, - backup, - stageAll, - unstageAll, - push2, - pull2, - discard, - div0_binding, - div1_binding, - div2_binding, - div3_binding, - div4_binding, - div5_binding, - div6_binding, - click_handler, - div7_binding, - textarea_input_handler, - click_handler_1, - div2_binding_1, - click_handler_2, - div11_binding, - click_handler_3, - click_handler_4 - ]; -} -var SourceControl = class extends SvelteComponent { - constructor(options) { - super(); - init2(this, options, instance9, create_fragment9, safe_not_equal, { plugin: 0, view: 1 }, add_css7, [-1, -1]); - } -}; -var sourceControl_default = SourceControl; - -// src/ui/sourceControl/sourceControl.ts -var GitView = class extends import_obsidian30.ItemView { - constructor(leaf, plugin) { - super(leaf); - this.plugin = plugin; - this.hoverPopover = null; - } - getViewType() { - return SOURCE_CONTROL_VIEW_CONFIG.type; - } - getDisplayText() { - return SOURCE_CONTROL_VIEW_CONFIG.name; - } - getIcon() { - return SOURCE_CONTROL_VIEW_CONFIG.icon; - } - onClose() { - return super.onClose(); - } - onOpen() { - this._view = new sourceControl_default({ - target: this.contentEl, - props: { - plugin: this.plugin, - view: this - } - }); - return super.onOpen(); - } -}; - -// src/ui/statusBar/branchStatusBar.ts -init_polyfill_buffer(); -var BranchStatusBar = class { - constructor(statusBarEl, plugin) { - this.statusBarEl = statusBarEl; - this.plugin = plugin; - this.statusBarEl.addClass("mod-clickable"); - this.statusBarEl.onClickEvent((e) => { - this.plugin.switchBranch(); - }); - } - async display() { - if (this.plugin.gitReady) { - const branchInfo = await this.plugin.gitManager.branchInfo(); - if (branchInfo.current != void 0) { - this.statusBarEl.setText(branchInfo.current); - } else { - this.statusBarEl.empty(); - } - } else { - this.statusBarEl.empty(); - } - } -}; - -// src/main.ts -var ObsidianGit = class extends import_obsidian31.Plugin { - constructor() { - super(...arguments); - this.gitReady = false; - this.promiseQueue = new PromiseQueue(); - this.conflictOutputFile = "conflict-files-obsidian-git.md"; - this.offlineMode = false; - this.loading = false; - this.lineAuthoringFeature = new LineAuthoringFeature(this); - } - setState(state) { - var _a2; - this.state = state; - (_a2 = this.statusBar) == null ? void 0 : _a2.display(); - } - async updateCachedStatus() { - this.cachedStatus = await this.gitManager.status(); - return this.cachedStatus; - } - async refresh() { - const gitView = this.app.workspace.getLeavesOfType( - SOURCE_CONTROL_VIEW_CONFIG.type - ); - const historyView = this.app.workspace.getLeavesOfType( - HISTORY_VIEW_CONFIG.type - ); - if (this.settings.changedFilesInStatusBar || gitView.length > 0 || historyView.length > 0) { - this.loading = true; - dispatchEvent(new CustomEvent("git-view-refresh")); - await this.updateCachedStatus(); - this.loading = false; - dispatchEvent(new CustomEvent("git-view-refresh")); - } - } - async refreshUpdatedHead() { - this.lineAuthoringFeature.refreshLineAuthorViews(); - } - async onload() { - console.log("loading " + this.manifest.name + " plugin"); - pluginRef.plugin = this; - this.localStorage = new LocalStorageSettings(this); - this.localStorage.migrate(); - await this.loadSettings(); - this.migrateSettings(); - this.settingsTab = new ObsidianGitSettingsTab(this.app, this); - this.addSettingTab(this.settingsTab); - if (!this.localStorage.getPluginDisabled()) { - this.loadPlugin(); - } - } - async loadPlugin() { - addEventListener("git-refresh", this.refresh.bind(this)); - addEventListener("git-head-update", this.refreshUpdatedHead.bind(this)); - this.registerView(SOURCE_CONTROL_VIEW_CONFIG.type, (leaf) => { - return new GitView(leaf, this); - }); - this.registerView(HISTORY_VIEW_CONFIG.type, (leaf) => { - return new HistoryView2(leaf, this); - }); - this.registerView(DIFF_VIEW_CONFIG.type, (leaf) => { - return new DiffView(leaf, this); - }); - this.lineAuthoringFeature.onLoadPlugin(); - this.app.workspace.registerHoverLinkSource( - SOURCE_CONTROL_VIEW_CONFIG.type, - { - display: "Git View", - defaultMod: true - } - ); - this.setRefreshDebouncer(); - this.addCommand({ - id: "edit-gitignore", - name: "Edit .gitignore", - callback: async () => { - const path2 = this.gitManager.getRelativeVaultPath(".gitignore"); - if (!await this.app.vault.adapter.exists(path2)) { - this.app.vault.adapter.write(path2, ""); - } - const content = await this.app.vault.adapter.read(path2); - const modal = new IgnoreModal(this.app, content); - const res = await modal.open(); - if (res !== void 0) { - await this.app.vault.adapter.write(path2, res); - this.refresh(); - } - } - }); - this.addCommand({ - id: "open-git-view", - name: "Open source control view", - callback: async () => { - const leafs = this.app.workspace.getLeavesOfType( - SOURCE_CONTROL_VIEW_CONFIG.type - ); - let leaf; - if (leafs.length === 0) { - leaf = this.app.workspace.getRightLeaf(false); - await leaf.setViewState({ - type: SOURCE_CONTROL_VIEW_CONFIG.type - }); - } else { - leaf = leafs.first(); - } - this.app.workspace.revealLeaf(leaf); - dispatchEvent(new CustomEvent("git-refresh")); - } - }); - this.addCommand({ - id: "open-history-view", - name: "Open history view", - callback: async () => { - const leafs = this.app.workspace.getLeavesOfType( - HISTORY_VIEW_CONFIG.type - ); - let leaf; - if (leafs.length === 0) { - leaf = this.app.workspace.getRightLeaf(false); - await leaf.setViewState({ - type: HISTORY_VIEW_CONFIG.type - }); - } else { - leaf = leafs.first(); - } - this.app.workspace.revealLeaf(leaf); - dispatchEvent(new CustomEvent("git-refresh")); - } - }); - this.addCommand({ - id: "open-diff-view", - name: "Open diff view", - checkCallback: (checking) => { - var _a2; - const file = this.app.workspace.getActiveFile(); - if (checking) { - return file !== null; - } else { - (_a2 = getNewLeaf()) == null ? void 0 : _a2.setViewState({ - type: DIFF_VIEW_CONFIG.type, - active: true, - state: { - staged: false, - file: this.gitManager.getRelativeRepoPath( - file.path, - true - ) - } - }); - } - } - }); - this.addCommand({ - id: "view-file-on-github", - name: "Open file on GitHub", - editorCallback: (editor, { file }) => { - if (file) - return openLineInGitHub(editor, file, this.gitManager); - } - }); - this.addCommand({ - id: "view-history-on-github", - name: "Open file history on GitHub", - editorCallback: (_, { file }) => { - if (file) - return openHistoryInGitHub(file, this.gitManager); - } - }); - this.addCommand({ - id: "pull", - name: "Pull", - callback: () => this.promiseQueue.addTask(() => this.pullChangesFromRemote()) - }); - this.addCommand({ - id: "fetch", - name: "fetch", - callback: () => this.promiseQueue.addTask(() => this.fetch()) - }); - this.addCommand({ - id: "switch-to-remote-branch", - name: "Switch to remote branch", - callback: () => this.promiseQueue.addTask(() => this.switchRemoteBranch()) - }); - this.addCommand({ - id: "add-to-gitignore", - name: "Add file to gitignore", - checkCallback: (checking) => { - const file = this.app.workspace.getActiveFile(); - if (checking) { - return file !== null; - } else { - this.app.vault.adapter.append( - this.gitManager.getRelativeVaultPath(".gitignore"), - "\n" + this.gitManager.getRelativeRepoPath( - file.path, - true - ) - ).then(() => { - this.refresh(); - }); - } - } - }); - this.addCommand({ - id: "push", - name: "Create backup", - callback: () => this.promiseQueue.addTask(() => this.createBackup(false)) - }); - this.addCommand({ - id: "backup-and-close", - name: "Create backup and close", - callback: () => this.promiseQueue.addTask(async () => { - await this.createBackup(false); - window.close(); - }) - }); - this.addCommand({ - id: "commit-push-specified-message", - name: "Create backup with specific message", - callback: () => this.promiseQueue.addTask(() => this.createBackup(false, true)) - }); - this.addCommand({ - id: "commit", - name: "Commit all changes", - callback: () => this.promiseQueue.addTask( - () => this.commit({ fromAutoBackup: false }) - ) - }); - this.addCommand({ - id: "commit-specified-message", - name: "Commit all changes with specific message", - callback: () => this.promiseQueue.addTask( - () => this.commit({ - fromAutoBackup: false, - requestCustomMessage: true - }) - ) - }); - this.addCommand({ - id: "commit-staged", - name: "Commit staged", - callback: () => this.promiseQueue.addTask( - () => this.commit({ - fromAutoBackup: false, - requestCustomMessage: false, - onlyStaged: true - }) - ) - }); - if (import_obsidian31.Platform.isDesktopApp) { - this.addCommand({ - id: "commit-amend-staged-specified-message", - name: "Commit Amend", - callback: () => this.promiseQueue.addTask( - () => this.commit({ - fromAutoBackup: false, - requestCustomMessage: true, - onlyStaged: true, - amend: true - }) - ) - }); - } - this.addCommand({ - id: "commit-staged-specified-message", - name: "Commit staged with specific message", - callback: () => this.promiseQueue.addTask( - () => this.commit({ - fromAutoBackup: false, - requestCustomMessage: true, - onlyStaged: true - }) - ) - }); - this.addCommand({ - id: "push2", - name: "Push", - callback: () => this.promiseQueue.addTask(() => this.push()) - }); - this.addCommand({ - id: "stage-current-file", - name: "Stage current file", - checkCallback: (checking) => { - const file = this.app.workspace.getActiveFile(); - if (checking) { - return file !== null; - } else { - this.promiseQueue.addTask(() => this.stageFile(file)); - } - } - }); - this.addCommand({ - id: "unstage-current-file", - name: "Unstage current file", - checkCallback: (checking) => { - const file = this.app.workspace.getActiveFile(); - if (checking) { - return file !== null; - } else { - this.promiseQueue.addTask(() => this.unstageFile(file)); - } - } - }); - this.addCommand({ - id: "edit-remotes", - name: "Edit remotes", - callback: async () => this.editRemotes() - }); - this.addCommand({ - id: "remove-remote", - name: "Remove remote", - callback: async () => this.removeRemote() - }); - this.addCommand({ - id: "set-upstream-branch", - name: "Set upstream branch", - callback: async () => this.setUpstreamBranch() - }); - this.addCommand({ - id: "delete-repo", - name: "CAUTION: Delete repository", - callback: async () => { - const repoExists = await this.app.vault.adapter.exists( - `${this.settings.basePath}/.git` - ); - if (repoExists) { - const modal = new GeneralModal({ - options: ["NO", "YES"], - placeholder: "Do you really want to delete the repository (.git directory)? This action cannot be undone.", - onlySelection: true - }); - const shouldDelete = await modal.open() === "YES"; - if (shouldDelete) { - await this.app.vault.adapter.rmdir( - `${this.settings.basePath}/.git`, - true - ); - new import_obsidian31.Notice( - "Successfully deleted repository. Reloading plugin..." - ); - this.unloadPlugin(); - this.init(); - } - } else { - new import_obsidian31.Notice("No repository found"); - } - } - }); - this.addCommand({ - id: "init-repo", - name: "Initialize a new repo", - callback: async () => this.createNewRepo() - }); - this.addCommand({ - id: "clone-repo", - name: "Clone an existing remote repo", - callback: async () => this.cloneNewRepo() - }); - this.addCommand({ - id: "list-changed-files", - name: "List changed files", - callback: async () => { - if (!await this.isAllInitialized()) - return; - const status2 = await this.gitManager.status(); - console.log(status2); - this.setState(0 /* idle */); - if (status2.changed.length + status2.staged.length > 500) { - this.displayError("Too many changes to display"); - return; - } - new ChangedFilesModal(this, status2.all).open(); - } - }); - this.addCommand({ - id: "switch-branch", - name: "Switch branch", - callback: () => { - this.switchBranch(); - } - }); - this.addCommand({ - id: "create-branch", - name: "Create new branch", - callback: () => { - this.createBranch(); - } - }); - this.addCommand({ - id: "delete-branch", - name: "Delete branch", - callback: () => { - this.deleteBranch(); - } - }); - this.addCommand({ - id: "discard-all", - name: "CAUTION: Discard all changes", - callback: async () => { - if (!await this.isAllInitialized()) - return false; - const modal = new GeneralModal({ - options: ["NO", "YES"], - placeholder: "Do you want to discard all changes to tracked files? This action cannot be undone.", - onlySelection: true - }); - const shouldDiscardAll = await modal.open() === "YES"; - if (shouldDiscardAll) { - this.promiseQueue.addTask(() => this.discardAll()); - } - } - }); - this.addCommand({ - id: "toggle-line-author-info", - name: "Toggle line author information", - callback: () => { - var _a2; - return (_a2 = this.settingsTab) == null ? void 0 : _a2.configureLineAuthorShowStatus( - !this.settings.lineAuthor.show - ); - } - }); - this.registerEvent( - this.app.workspace.on("file-menu", (menu, file, source) => { - this.handleFileMenu(menu, file, source); - }) - ); - if (this.settings.showStatusBar) { - const statusBarEl = this.addStatusBarItem(); - this.statusBar = new StatusBar(statusBarEl, this); - this.registerInterval( - window.setInterval(() => { - var _a2; - return (_a2 = this.statusBar) == null ? void 0 : _a2.display(); - }, 1e3) - ); - } - if (import_obsidian31.Platform.isDesktop && this.settings.showBranchStatusBar) { - const branchStatusBarEl = this.addStatusBarItem(); - this.branchBar = new BranchStatusBar(branchStatusBarEl, this); - this.registerInterval( - window.setInterval(() => { - var _a2; - return (_a2 = this.branchBar) == null ? void 0 : _a2.display(); - }, 6e4) - ); - } - this.app.workspace.onLayoutReady(() => this.init()); - } - setRefreshDebouncer() { - var _a2; - (_a2 = this.debRefresh) == null ? void 0 : _a2.cancel(); - this.debRefresh = (0, import_obsidian31.debounce)( - () => { - if (this.settings.refreshSourceControl) { - this.refresh(); - } - }, - this.settings.refreshSourceControlTimer, - true - ); - } - async showNotices() { - const length = 1e4; - if (this.manifest.id === "obsidian-git" && import_obsidian31.Platform.isDesktopApp && !this.settings.showedMobileNotice) { - new import_obsidian31.Notice( - "Git is now available on mobile! Please read the plugin's README for more information.", - length - ); - this.settings.showedMobileNotice = true; - await this.saveSettings(); - } - if (this.manifest.id === "obsidian-git-isomorphic") { - new import_obsidian31.Notice( - "Git Mobile is now deprecated. Please uninstall it and install Git instead.", - length - ); - } - } - handleFileMenu(menu, file, source) { - if (!this.settings.showFileMenu) - return; - if (source !== "file-explorer-context-menu") { - return; - } - if (!file) { - return; - } - if (!this.gitReady) - return; - menu.addItem((item) => { - item.setTitle(`Git: Stage`).setIcon("plus-circle").setSection("action").onClick((_) => { - this.promiseQueue.addTask(async () => { - if (file instanceof import_obsidian31.TFile) { - await this.gitManager.stage(file.path, true); - } else { - await this.gitManager.stageAll({ - dir: this.gitManager.getRelativeRepoPath( - file.path, - true - ) - }); - } - this.displayMessage(`Staged ${file.path}`); - }); - }); - }); - menu.addItem((item) => { - item.setTitle(`Git: Unstage`).setIcon("minus-circle").setSection("action").onClick((_) => { - this.promiseQueue.addTask(async () => { - if (file instanceof import_obsidian31.TFile) { - await this.gitManager.unstage(file.path, true); - } else { - await this.gitManager.unstageAll({ - dir: this.gitManager.getRelativeRepoPath( - file.path, - true - ) - }); - } - this.displayMessage(`Unstaged ${file.path}`); - }); - }); - }); - } - async migrateSettings() { - if (this.settings.mergeOnPull != void 0) { - this.settings.syncMethod = this.settings.mergeOnPull ? "merge" : "rebase"; - this.settings.mergeOnPull = void 0; - await this.saveSettings(); - } - if (this.settings.autoCommitMessage === void 0) { - this.settings.autoCommitMessage = this.settings.commitMessage; - await this.saveSettings(); - } - if (this.settings.gitPath != void 0) { - this.localStorage.setGitPath(this.settings.gitPath); - this.settings.gitPath = void 0; - await this.saveSettings(); - } - if (this.settings.username != void 0) { - this.localStorage.setPassword(this.settings.username); - this.settings.username = void 0; - await this.saveSettings(); - } - } - unloadPlugin() { - this.gitReady = false; - dispatchEvent(new CustomEvent("git-refresh")); - this.lineAuthoringFeature.deactivateFeature(); - this.clearAutoPull(); - this.clearAutoPush(); - this.clearAutoBackup(); - removeEventListener("git-refresh", this.refresh.bind(this)); - removeEventListener( - "git-head-update", - this.refreshUpdatedHead.bind(this) - ); - this.app.workspace.offref(this.openEvent); - this.app.metadataCache.offref(this.modifyEvent); - this.app.metadataCache.offref(this.deleteEvent); - this.app.metadataCache.offref(this.createEvent); - this.app.metadataCache.offref(this.renameEvent); - this.debRefresh.cancel(); - } - async onunload() { - this.app.workspace.unregisterHoverLinkSource( - SOURCE_CONTROL_VIEW_CONFIG.type - ); - this.unloadPlugin(); - console.log("unloading " + this.manifest.name + " plugin"); - } - async loadSettings() { - let data = await this.loadData(); - if (data == void 0) { - data = { showedMobileNotice: true }; - } - this.settings = mergeSettingsByPriority(DEFAULT_SETTINGS, data); - } - async saveSettings() { - var _a2; - (_a2 = this.settingsTab) == null ? void 0 : _a2.beforeSaveSettings(); - await this.saveData(this.settings); - } - saveLastAuto(date, mode) { - if (mode === "backup") { - this.localStorage.setLastAutoBackup(date.toString()); - } else if (mode === "pull") { - this.localStorage.setLastAutoPull(date.toString()); - } else if (mode === "push") { - this.localStorage.setLastAutoPush(date.toString()); - } - } - loadLastAuto() { - var _a2, _b, _c; - return { - backup: new Date((_a2 = this.localStorage.getLastAutoBackup()) != null ? _a2 : ""), - pull: new Date((_b = this.localStorage.getLastAutoPull()) != null ? _b : ""), - push: new Date((_c = this.localStorage.getLastAutoPush()) != null ? _c : "") - }; - } - get useSimpleGit() { - return import_obsidian31.Platform.isDesktopApp; - } - async init() { - var _a2; - this.showNotices(); - try { - if (this.useSimpleGit) { - this.gitManager = new SimpleGit(this); - await this.gitManager.setGitInstance(); - } else { - this.gitManager = new IsomorphicGit(this); - } - const result = await this.gitManager.checkRequirements(); - switch (result) { - case "missing-git": - this.displayError("Cannot run git command"); - break; - case "missing-repo": - new import_obsidian31.Notice( - "Can't find a valid git repository. Please create one via the given command or clone an existing repo.", - 1e4 - ); - break; - case "valid": - this.gitReady = true; - this.setState(0 /* idle */); - this.openEvent = this.app.workspace.on( - "active-leaf-change", - (leaf) => this.handleViewActiveState(leaf) - ); - this.modifyEvent = this.app.vault.on("modify", () => { - this.debRefresh(); - }); - this.deleteEvent = this.app.vault.on("delete", () => { - this.debRefresh(); - }); - this.createEvent = this.app.vault.on("create", () => { - this.debRefresh(); - }); - this.renameEvent = this.app.vault.on("rename", () => { - this.debRefresh(); - }); - this.registerEvent(this.modifyEvent); - this.registerEvent(this.deleteEvent); - this.registerEvent(this.createEvent); - this.registerEvent(this.renameEvent); - (_a2 = this.branchBar) == null ? void 0 : _a2.display(); - this.lineAuthoringFeature.conditionallyActivateBySettings(); - dispatchEvent(new CustomEvent("git-refresh")); - if (this.settings.autoPullOnBoot) { - this.promiseQueue.addTask( - () => this.pullChangesFromRemote() - ); - } - this.setUpAutos(); - break; - default: - console.log( - "Something weird happened. The 'checkRequirements' result is " + result - ); - } - } catch (error) { - this.displayError(error); - console.error(error); - } - } - async createNewRepo() { - await this.gitManager.init(); - new import_obsidian31.Notice("Initialized new repo"); - await this.init(); - } - async cloneNewRepo() { - const modal = new GeneralModal({ placeholder: "Enter remote URL" }); - const url = await modal.open(); - if (url) { - const confirmOption = "Vault Root"; - let dir = await new GeneralModal({ - options: this.gitManager instanceof IsomorphicGit ? [confirmOption] : [], - placeholder: "Enter directory for clone. It needs to be empty or not existent.", - allowEmpty: this.gitManager instanceof IsomorphicGit - }).open(); - if (dir !== void 0) { - if (dir === confirmOption) { - dir = "."; - } - dir = (0, import_obsidian31.normalizePath)(dir); - if (dir === "/") { - dir = "."; - } - if (dir === ".") { - const modal2 = new GeneralModal({ - options: ["NO", "YES"], - placeholder: `Does your remote repo contain a ${app.vault.configDir} directory at the root?`, - onlySelection: true - }); - const containsConflictDir = await modal2.open(); - if (containsConflictDir === void 0) { - new import_obsidian31.Notice("Aborted clone"); - return; - } else if (containsConflictDir === "YES") { - const confirmOption2 = "DELETE ALL YOUR LOCAL CONFIG AND PLUGINS"; - const modal3 = new GeneralModal({ - options: ["Abort clone", confirmOption2], - placeholder: `To avoid conflicts, the local ${app.vault.configDir} directory needs to be deleted.`, - onlySelection: true - }); - const shouldDelete = await modal3.open() === confirmOption2; - if (shouldDelete) { - await this.app.vault.adapter.rmdir( - app.vault.configDir, - true - ); - } else { - new import_obsidian31.Notice("Aborted clone"); - return; - } - } - } - const depth = await new GeneralModal({ - placeholder: "Specify depth of clone. Leave empty for full clone.", - allowEmpty: true - }).open(); - let depthInt = void 0; - if (depth !== "") { - depthInt = parseInt(depth); - if (isNaN(depthInt)) { - new import_obsidian31.Notice("Invalid depth. Aborting clone."); - return; - } - } - new import_obsidian31.Notice(`Cloning new repo into "${dir}"`); - const oldBase = this.settings.basePath; - const customDir = dir && dir !== "."; - if (customDir) { - this.settings.basePath = dir; - } - try { - await this.gitManager.clone(url, dir, depthInt); - } catch (error) { - this.settings.basePath = oldBase; - this.saveSettings(); - throw error; - } - new import_obsidian31.Notice("Cloned new repo."); - new import_obsidian31.Notice("Please restart Obsidian"); - if (customDir) { - this.saveSettings(); - } - } - } - } - /** - * Retries to call `this.init()` if necessary, otherwise returns directly - * @returns true if `this.gitManager` is ready to be used, false if not. - */ - async isAllInitialized() { - if (!this.gitReady) { - await this.init(); - } - return this.gitReady; - } - ///Used for command - async pullChangesFromRemote() { - if (!await this.isAllInitialized()) - return; - const filesUpdated = await this.pull(); - this.setUpAutoBackup(); - if (filesUpdated === false) { - return; - } - if (!filesUpdated) { - this.displayMessage("Everything is up-to-date"); - } - if (this.gitManager instanceof SimpleGit) { - const status2 = await this.gitManager.status(); - if (status2.conflicted.length > 0) { - this.displayError( - `You have conflicts in ${status2.conflicted.length} ${status2.conflicted.length == 1 ? "file" : "files"}` - ); - this.handleConflict(status2.conflicted); - } - } - dispatchEvent(new CustomEvent("git-refresh")); - this.setState(0 /* idle */); - } - async createBackup(fromAutoBackup, requestCustomMessage = false, commitMessage) { - if (!await this.isAllInitialized()) - return; - if (this.settings.syncMethod == "reset" && this.settings.pullBeforePush) { - await this.pull(); - } - if (!await this.commit({ - fromAutoBackup, - requestCustomMessage, - commitMessage - })) { - return; - } - if (!this.settings.disablePush) { - if (await this.remotesAreSet() && await this.gitManager.canPush()) { - if (this.settings.syncMethod != "reset" && this.settings.pullBeforePush) { - await this.pull(); - } - await this.push(); - } else { - this.displayMessage("No changes to push"); - } - } - this.setState(0 /* idle */); - } - // Returns true if commit was successfully - async commit({ - fromAutoBackup, - requestCustomMessage = false, - onlyStaged = false, - commitMessage, - amend = false - }) { - if (!await this.isAllInitialized()) - return false; - let hadConflict = this.localStorage.getConflict(); - let changedFiles; - let status2; - let unstagedFiles; - if (this.gitManager instanceof SimpleGit) { - this.mayDeleteConflictFile(); - status2 = await this.updateCachedStatus(); - if (status2.conflicted.length == 0) { - this.localStorage.setConflict(false); - hadConflict = false; - } - if (fromAutoBackup && status2.conflicted.length > 0) { - this.displayError( - `Did not commit, because you have conflicts in ${status2.conflicted.length} ${status2.conflicted.length == 1 ? "file" : "files"}. Please resolve them and commit per command.` - ); - this.handleConflict(status2.conflicted); - return false; - } - changedFiles = [...status2.changed, ...status2.staged]; - } else if (fromAutoBackup && hadConflict) { - this.setState(6 /* conflicted */); - this.displayError( - `Did not commit, because you have conflicts. Please resolve them and commit per command.` - ); - return false; - } else if (hadConflict) { - await this.mayDeleteConflictFile(); - status2 = await this.updateCachedStatus(); - changedFiles = [...status2.changed, ...status2.staged]; - } else { - if (onlyStaged) { - changedFiles = await this.gitManager.getStagedFiles(); - } else { - unstagedFiles = await this.gitManager.getUnstagedFiles(); - changedFiles = unstagedFiles.map(({ filepath }) => ({ - vault_path: this.gitManager.getRelativeVaultPath(filepath) - })); - } - } - if (await this.hasTooBigFiles(changedFiles)) { - this.setState(0 /* idle */); - return false; - } - if (changedFiles.length !== 0 || hadConflict) { - let cmtMessage = commitMessage != null ? commitMessage : commitMessage = fromAutoBackup ? this.settings.autoCommitMessage : this.settings.commitMessage; - if (fromAutoBackup && this.settings.customMessageOnAutoBackup || requestCustomMessage) { - if (!this.settings.disablePopups && fromAutoBackup) { - new import_obsidian31.Notice( - "Auto backup: Please enter a custom commit message. Leave empty to abort" - ); - } - const tempMessage = await new CustomMessageModal( - this, - true - ).open(); - if (tempMessage != void 0 && tempMessage != "" && tempMessage != "...") { - cmtMessage = tempMessage; - } else { - this.setState(0 /* idle */); - return false; - } - } - let committedFiles; - if (onlyStaged) { - committedFiles = await this.gitManager.commit({ - message: cmtMessage, - amend - }); - } else { - committedFiles = await this.gitManager.commitAll({ - message: cmtMessage, - status: status2, - unstagedFiles, - amend - }); - } - if (this.gitManager instanceof SimpleGit) { - if ((await this.updateCachedStatus()).conflicted.length == 0) { - this.localStorage.setConflict(false); - } - } - let roughly = false; - if (committedFiles === void 0) { - roughly = true; - committedFiles = changedFiles.length; - } - this.setUpAutoBackup(); - this.displayMessage( - `Committed${roughly ? " approx." : ""} ${committedFiles} ${committedFiles == 1 ? "file" : "files"}` - ); - } else { - this.displayMessage("No changes to commit"); - } - dispatchEvent(new CustomEvent("git-refresh")); - this.setState(0 /* idle */); - return true; - } - async hasTooBigFiles(files) { - const branchInfo = await this.gitManager.branchInfo(); - const remote = branchInfo.tracking ? splitRemoteBranch(branchInfo.tracking)[0] : null; - if (remote) { - const remoteUrl = await this.gitManager.getRemoteUrl(remote); - if (remoteUrl == null ? void 0 : remoteUrl.includes("github.com")) { - const tooBigFiles = files.filter((f) => { - const file = this.app.vault.getAbstractFileByPath( - f.vault_path - ); - if (file instanceof import_obsidian31.TFile) { - return file.stat.size >= 1e8; - } - return false; - }); - if (tooBigFiles.length > 0) { - this.displayError( - `Did not commit, because following files are too big: ${tooBigFiles.map( - (e) => e.vault_path - )}. Please remove them.` - ); - return true; - } - } - } - return false; - } - async push() { - if (!await this.isAllInitialized()) - return false; - if (!await this.remotesAreSet()) { - return false; - } - const hadConflict = this.localStorage.getConflict(); - if (this.gitManager instanceof SimpleGit) - await this.mayDeleteConflictFile(); - let status2; - if (this.gitManager instanceof SimpleGit && (status2 = await this.updateCachedStatus()).conflicted.length > 0) { - this.displayError( - `Cannot push. You have conflicts in ${status2.conflicted.length} ${status2.conflicted.length == 1 ? "file" : "files"}` - ); - this.handleConflict(status2.conflicted); - return false; - } else if (this.gitManager instanceof IsomorphicGit && hadConflict) { - this.displayError(`Cannot push. You have conflicts`); - this.setState(6 /* conflicted */); - return false; - } - console.log("Pushing...."); - const pushedFiles = await this.gitManager.push(); - if (pushedFiles !== void 0) { - console.log("Pushed!", pushedFiles); - if (pushedFiles > 0) { - this.displayMessage( - `Pushed ${pushedFiles} ${pushedFiles == 1 ? "file" : "files"} to remote` - ); - } else { - this.displayMessage(`No changes to push`); - } - } - this.offlineMode = false; - this.setState(0 /* idle */); - dispatchEvent(new CustomEvent("git-refresh")); - return true; - } - /** Used for internals - Returns whether the pull added a commit or not. - - See {@link pullChangesFromRemote} for the command version. */ - async pull() { - if (!await this.remotesAreSet()) { - return false; - } - const pulledFiles = await this.gitManager.pull() || []; - this.offlineMode = false; - if (pulledFiles.length > 0) { - this.displayMessage( - `Pulled ${pulledFiles.length} ${pulledFiles.length == 1 ? "file" : "files"} from remote` - ); - this.lastPulledFiles = pulledFiles; - } - return pulledFiles.length; - } - async fetch() { - if (!await this.remotesAreSet()) { - return; - } - await this.gitManager.fetch(); - this.displayMessage(`Fetched from remote`); - this.offlineMode = false; - dispatchEvent(new CustomEvent("git-refresh")); - } - async mayDeleteConflictFile() { - const file = this.app.vault.getAbstractFileByPath( - this.conflictOutputFile - ); - if (file) { - this.app.workspace.iterateAllLeaves((leaf) => { - var _a2; - if (leaf.view instanceof import_obsidian31.MarkdownView && ((_a2 = leaf.view.file) == null ? void 0 : _a2.path) == file.path) { - leaf.detach(); - } - }); - await this.app.vault.delete(file); - } - } - async stageFile(file) { - if (!await this.isAllInitialized()) - return false; - await this.gitManager.stage(file.path, true); - this.displayMessage(`Staged ${file.path}`); - dispatchEvent(new CustomEvent("git-refresh")); - this.setState(0 /* idle */); - return true; - } - async unstageFile(file) { - if (!await this.isAllInitialized()) - return false; - await this.gitManager.unstage(file.path, true); - this.displayMessage(`Unstaged ${file.path}`); - dispatchEvent(new CustomEvent("git-refresh")); - this.setState(0 /* idle */); - return true; - } - async switchBranch() { - var _a2; - if (!await this.isAllInitialized()) - return; - const branchInfo = await this.gitManager.branchInfo(); - const selectedBranch = await new BranchModal( - branchInfo.branches - ).open(); - if (selectedBranch != void 0) { - await this.gitManager.checkout(selectedBranch); - this.displayMessage(`Switched to ${selectedBranch}`); - (_a2 = this.branchBar) == null ? void 0 : _a2.display(); - return selectedBranch; - } - } - async switchRemoteBranch() { - var _a2; - if (!await this.isAllInitialized()) - return; - const selectedBranch = await this.selectRemoteBranch() || ""; - const [remote, branch2] = splitRemoteBranch(selectedBranch); - if (branch2 != void 0 && remote != void 0) { - await this.gitManager.checkout(branch2, remote); - this.displayMessage(`Switched to ${selectedBranch}`); - (_a2 = this.branchBar) == null ? void 0 : _a2.display(); - return selectedBranch; - } - } - async createBranch() { - var _a2; - if (!await this.isAllInitialized()) - return; - const newBranch = await new GeneralModal({ - placeholder: "Create new branch" - }).open(); - if (newBranch != void 0) { - await this.gitManager.createBranch(newBranch); - this.displayMessage(`Created new branch ${newBranch}`); - (_a2 = this.branchBar) == null ? void 0 : _a2.display(); - return newBranch; - } - } - async deleteBranch() { - var _a2; - if (!await this.isAllInitialized()) - return; - const branchInfo = await this.gitManager.branchInfo(); - if (branchInfo.current) - branchInfo.branches.remove(branchInfo.current); - const branch2 = await new GeneralModal({ - options: branchInfo.branches, - placeholder: "Delete branch", - onlySelection: true - }).open(); - if (branch2 != void 0) { - let force = false; - const merged = await this.gitManager.branchIsMerged(branch2); - if (!merged) { - const forceAnswer = await new GeneralModal({ - options: ["YES", "NO"], - placeholder: "This branch isn't merged into HEAD. Force delete?", - onlySelection: true - }).open(); - if (forceAnswer !== "YES") { - return; - } - force = forceAnswer === "YES"; - } - await this.gitManager.deleteBranch(branch2, force); - this.displayMessage(`Deleted branch ${branch2}`); - (_a2 = this.branchBar) == null ? void 0 : _a2.display(); - return branch2; - } - } - // Ensures that the upstream branch is set. - // If not, it will prompt the user to set it. - // - // An exception is when the user has submodules enabled. - // In this case, the upstream branch is not required, - // to allow pulling/pushing only the submodules and not the outer repo. - async remotesAreSet() { - if (this.settings.updateSubmodules) { - return true; - } - if (!(await this.gitManager.branchInfo()).tracking) { - new import_obsidian31.Notice("No upstream branch is set. Please select one."); - return await this.setUpstreamBranch(); - } - return true; - } - async setUpstreamBranch() { - const remoteBranch = await this.selectRemoteBranch(); - if (remoteBranch == void 0) { - this.displayError("Aborted. No upstream-branch is set!", 1e4); - this.setState(0 /* idle */); - return false; - } else { - await this.gitManager.updateUpstreamBranch(remoteBranch); - this.displayMessage(`Set upstream branch to ${remoteBranch}`); - this.setState(0 /* idle */); - return true; - } - } - async setUpAutoBackup() { - if (this.settings.setLastSaveToLastCommit) { - this.clearAutoBackup(); - const lastCommitDate = await this.gitManager.getLastCommitTime(); - if (lastCommitDate) { - this.localStorage.setLastAutoBackup(lastCommitDate.toString()); - } - } - if (!this.timeoutIDBackup && !this.onFileModifyEventRef) { - const lastAutos = this.loadLastAuto(); - if (this.settings.autoSaveInterval > 0) { - const now2 = /* @__PURE__ */ new Date(); - const diff3 = this.settings.autoSaveInterval - Math.round( - (now2.getTime() - lastAutos.backup.getTime()) / 1e3 / 60 - ); - this.startAutoBackup(diff3 <= 0 ? 0 : diff3); - } - } - } - async setUpAutos() { - this.setUpAutoBackup(); - const lastAutos = this.loadLastAuto(); - if (this.settings.differentIntervalCommitAndPush && this.settings.autoPushInterval > 0) { - const now2 = /* @__PURE__ */ new Date(); - const diff3 = this.settings.autoPushInterval - Math.round( - (now2.getTime() - lastAutos.push.getTime()) / 1e3 / 60 - ); - this.startAutoPush(diff3 <= 0 ? 0 : diff3); - } - if (this.settings.autoPullInterval > 0) { - const now2 = /* @__PURE__ */ new Date(); - const diff3 = this.settings.autoPullInterval - Math.round( - (now2.getTime() - lastAutos.pull.getTime()) / 1e3 / 60 - ); - this.startAutoPull(diff3 <= 0 ? 0 : diff3); - } - } - async discardAll() { - await this.gitManager.discardAll({ - status: this.cachedStatus - }); - new import_obsidian31.Notice( - "All local changes have been discarded. New files remain untouched." - ); - } - clearAutos() { - this.clearAutoBackup(); - this.clearAutoPush(); - this.clearAutoPull(); - } - startAutoBackup(minutes) { - let time = (minutes != null ? minutes : this.settings.autoSaveInterval) * 6e4; - if (this.settings.autoBackupAfterFileChange) { - if (minutes === 0) { - this.doAutoBackup(); - } else { - this.onFileModifyEventRef = this.app.vault.on( - "modify", - () => this.autoBackupDebouncer() - ); - this.autoBackupDebouncer = (0, import_obsidian31.debounce)( - () => this.doAutoBackup(), - time, - true - ); - } - } else { - if (time > 2147483647) - time = 2147483647; - this.timeoutIDBackup = window.setTimeout( - () => this.doAutoBackup(), - time - ); - } - } - // This is used for both auto backup and commit - doAutoBackup() { - this.promiseQueue.addTask(() => { - if (this.settings.differentIntervalCommitAndPush) { - return this.commit({ fromAutoBackup: true }); - } else { - return this.createBackup(true); - } - }); - this.saveLastAuto(/* @__PURE__ */ new Date(), "backup"); - this.saveSettings(); - this.startAutoBackup(); - } - startAutoPull(minutes) { - let time = (minutes != null ? minutes : this.settings.autoPullInterval) * 6e4; - if (time > 2147483647) - time = 2147483647; - this.timeoutIDPull = window.setTimeout(() => { - this.promiseQueue.addTask(() => this.pullChangesFromRemote()); - this.saveLastAuto(/* @__PURE__ */ new Date(), "pull"); - this.saveSettings(); - this.startAutoPull(); - }, time); - } - startAutoPush(minutes) { - let time = (minutes != null ? minutes : this.settings.autoPushInterval) * 6e4; - if (time > 2147483647) - time = 2147483647; - this.timeoutIDPush = window.setTimeout(() => { - this.promiseQueue.addTask(() => this.push()); - this.saveLastAuto(/* @__PURE__ */ new Date(), "push"); - this.saveSettings(); - this.startAutoPush(); - }, time); - } - clearAutoBackup() { - var _a2; - let wasActive = false; - if (this.timeoutIDBackup) { - window.clearTimeout(this.timeoutIDBackup); - this.timeoutIDBackup = void 0; - wasActive = true; - } - if (this.onFileModifyEventRef) { - (_a2 = this.autoBackupDebouncer) == null ? void 0 : _a2.cancel(); - this.app.vault.offref(this.onFileModifyEventRef); - this.onFileModifyEventRef = void 0; - wasActive = true; - } - return wasActive; - } - clearAutoPull() { - if (this.timeoutIDPull) { - window.clearTimeout(this.timeoutIDPull); - this.timeoutIDPull = void 0; - return true; - } - return false; - } - clearAutoPush() { - if (this.timeoutIDPush) { - window.clearTimeout(this.timeoutIDPush); - this.timeoutIDPush = void 0; - return true; - } - return false; - } - async handleConflict(conflicted) { - this.setState(6 /* conflicted */); - this.localStorage.setConflict(true); - let lines; - if (conflicted !== void 0) { - lines = [ - "# Conflicts", - "Please resolve them and commit them using the commands `Git: Commit all changes` followed by `Git: Push`", - "(This file will automatically be deleted before commit)", - "[[#Additional Instructions]] available below file list", - "", - ...conflicted.map((e) => { - const file = this.app.vault.getAbstractFileByPath(e); - if (file instanceof import_obsidian31.TFile) { - const link = this.app.metadataCache.fileToLinktext( - file, - "/" - ); - return `- [[${link}]]`; - } else { - return `- Not a file: ${e}`; - } - }), - ` -# Additional Instructions -I strongly recommend to use "Source mode" for viewing the conflicted files. For simple conflicts, in each file listed above replace every occurrence of the following text blocks with the desired text. - -\`\`\`diff -<<<<<<< HEAD - File changes in local repository -======= - File changes in remote repository ->>>>>>> origin/main -\`\`\`` - ]; - } - this.writeAndOpenFile(lines == null ? void 0 : lines.join("\n")); - } - async editRemotes() { - if (!await this.isAllInitialized()) - return; - const remotes = await this.gitManager.getRemotes(); - const nameModal = new GeneralModal({ - options: remotes, - placeholder: "Select or create a new remote by typing its name and selecting it" - }); - const remoteName = await nameModal.open(); - if (remoteName) { - const oldUrl = await this.gitManager.getRemoteUrl(remoteName); - const urlModal = new GeneralModal({ initialValue: oldUrl }); - const remoteURL = await urlModal.open(); - if (remoteURL) { - await this.gitManager.setRemote(remoteName, remoteURL); - return remoteName; - } - } - } - async selectRemoteBranch() { - let remotes = await this.gitManager.getRemotes(); - let selectedRemote; - if (remotes.length === 0) { - selectedRemote = await this.editRemotes(); - if (selectedRemote == void 0) { - remotes = await this.gitManager.getRemotes(); - } - } - const nameModal = new GeneralModal({ - options: remotes, - placeholder: "Select or create a new remote by typing its name and selecting it" - }); - const remoteName = selectedRemote != null ? selectedRemote : await nameModal.open(); - if (remoteName) { - this.displayMessage("Fetching remote branches"); - await this.gitManager.fetch(remoteName); - const branches = await this.gitManager.getRemoteBranches(remoteName); - const branchModal = new GeneralModal({ - options: branches, - placeholder: "Select or create a new remote branch by typing its name and selecting it" - }); - return await branchModal.open(); - } - } - async removeRemote() { - if (!await this.isAllInitialized()) - return; - const remotes = await this.gitManager.getRemotes(); - const nameModal = new GeneralModal({ - options: remotes, - placeholder: "Select a remote" - }); - const remoteName = await nameModal.open(); - if (remoteName) { - this.gitManager.removeRemote(remoteName); - } - } - async writeAndOpenFile(text2) { - if (text2 !== void 0) { - await this.app.vault.adapter.write(this.conflictOutputFile, text2); - } - let fileIsAlreadyOpened = false; - this.app.workspace.iterateAllLeaves((leaf) => { - if (leaf.getDisplayText() != "" && this.conflictOutputFile.startsWith(leaf.getDisplayText())) { - fileIsAlreadyOpened = true; - } - }); - if (!fileIsAlreadyOpened) { - this.app.workspace.openLinkText(this.conflictOutputFile, "/", true); - } - } - handleViewActiveState(leaf) { - var _a2, _b; - if (!(leaf == null ? void 0 : leaf.view.getState().file)) - return; - const sourceControlLeaf = this.app.workspace.getLeavesOfType(SOURCE_CONTROL_VIEW_CONFIG.type).first(); - const historyLeaf = this.app.workspace.getLeavesOfType(HISTORY_VIEW_CONFIG.type).first(); - (_a2 = sourceControlLeaf == null ? void 0 : sourceControlLeaf.view.containerEl.querySelector(`div.nav-file-title.is-active`)) == null ? void 0 : _a2.removeClass("is-active"); - (_b = historyLeaf == null ? void 0 : historyLeaf.view.containerEl.querySelector(`div.nav-file-title.is-active`)) == null ? void 0 : _b.removeClass("is-active"); - if ((leaf == null ? void 0 : leaf.view) instanceof DiffView) { - const path2 = leaf.view.state.file; - this.lastDiffViewState = leaf.view.getState(); - let el; - if (sourceControlLeaf && leaf.view.state.staged) { - el = sourceControlLeaf.view.containerEl.querySelector( - `div.staged div.nav-file-title[data-path='${path2}']` - ); - } else if (sourceControlLeaf && leaf.view.state.staged === false && !leaf.view.state.hash) { - el = sourceControlLeaf.view.containerEl.querySelector( - `div.changes div.nav-file-title[data-path='${path2}']` - ); - } else if (historyLeaf && leaf.view.state.hash) { - el = historyLeaf.view.containerEl.querySelector( - `div.nav-file-title[data-path='${path2}']` - ); - } - el == null ? void 0 : el.addClass("is-active"); - } else { - this.lastDiffViewState = void 0; - } - } - // region: displaying / formatting messages - displayMessage(message, timeout = 4 * 1e3) { - var _a2; - (_a2 = this.statusBar) == null ? void 0 : _a2.displayMessage(message.toLowerCase(), timeout); - if (!this.settings.disablePopups) { - if (!this.settings.disablePopupsForNoChanges || !message.startsWith("No changes")) { - new import_obsidian31.Notice(message, 5 * 1e3); - } - } - this.log(message); - } - displayError(message, timeout = 10 * 1e3) { - var _a2; - if (message instanceof Errors.UserCanceledError) { - new import_obsidian31.Notice("Aborted"); - return; - } - message = message.toString(); - new import_obsidian31.Notice(message, timeout); - console.log(`git obsidian error: ${message}`); - (_a2 = this.statusBar) == null ? void 0 : _a2.displayMessage(message.toLowerCase(), timeout); - } - log(message) { - console.log(`${this.manifest.id}: ` + message); - } -}; -/*! Bundled license information: - -ieee754/index.js: - (*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh *) - -buffer/index.js: - (*! - * The buffer module from node.js, for the browser. - * - * @author Feross Aboukhadijeh - * @license MIT - *) - -safe-buffer/index.js: - (*! safe-buffer. MIT License. Feross Aboukhadijeh *) - -crc-32/crc32.js: - (*! crc32.js (C) 2014-present SheetJS -- http://sheetjs.com *) - -js-sha256/src/sha256.js: - (** - * [js-sha256]{@link https://github.com/emn178/js-sha256} - * - * @version 0.9.0 - * @author Chen, Yi-Cyuan [emn178@gmail.com] - * @copyright Chen, Yi-Cyuan 2014-2017 - * @license MIT - *) - -feather-icons/dist/feather.js: - (*! - Copyright (c) 2016 Jed Watson. - Licensed under the MIT License (MIT), see - http://jedwatson.github.io/classnames - *) -*/ diff --git a/.obsidian/plugins/obsidian-git/manifest.json b/.obsidian/plugins/obsidian-git/manifest.json deleted file mode 100644 index 045f4f8..0000000 --- a/.obsidian/plugins/obsidian-git/manifest.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "id": "obsidian-git", - "name": "Git", - "description": "Backup your vault with Git.", - "isDesktopOnly": false, - "fundingUrl": "https://ko-fi.com/vinzent", - "js": "main.js", - "version": "2.24.2" -} diff --git a/.obsidian/plugins/obsidian-git/styles.css b/.obsidian/plugins/obsidian-git/styles.css deleted file mode 100644 index 71a55ea..0000000 --- a/.obsidian/plugins/obsidian-git/styles.css +++ /dev/null @@ -1,558 +0,0 @@ -@keyframes loading { - 0% { - transform: rotate(0deg); - } - - 100% { - transform: rotate(360deg); - } -} - -.workspace-leaf-content[data-type="git-view"] .button-border { - border: 2px solid var(--interactive-accent); - border-radius: var(--radius-s); -} - -.workspace-leaf-content[data-type="git-view"] .view-content { - padding: 0; -} - -.workspace-leaf-content[data-type="git-history-view"] .view-content { - padding: 0; -} - -.loading > svg { - animation: 2s linear infinite loading; - transform-origin: 50% 50%; - display: inline-block; -} - -.obsidian-git-center { - margin: auto; - text-align: center; - width: 50%; -} - -.obsidian-git-textarea { - display: block; - margin-left: auto; - margin-right: auto; -} - -.obsidian-git-center-button { - display: block; - margin: 20px auto; -} - -.tooltip.mod-left { - overflow-wrap: break-word; -} - -.tooltip.mod-right { - overflow-wrap: break-word; -} -.git-tools { - display: flex; - margin-left: auto; -} -.git-tools .type { - padding-left: var(--size-2-1); - display: flex; - align-items: center; - justify-content: center; - width: 11px; -} - -.git-tools .type[data-type="M"] { - color: orange; -} -.git-tools .type[data-type="D"] { - color: red; -} -.git-tools .buttons { - display: flex; -} -.git-tools .buttons > * { - padding: 0 0; - height: auto; -} - -.git-author { - color: var(--text-accent); -} - -.git-date { - color: var(--text-accent); -} - -.git-ref { - color: var(--text-accent); -} - -.workspace-leaf-content[data-type="diff-view"] .d2h-d-none { - display: none; -} - -.workspace-leaf-content[data-type="diff-view"] .d2h-wrapper { - text-align: left; -} - -.workspace-leaf-content[data-type="diff-view"] .d2h-file-header { - background-color: var(--background-primary); - border-bottom: 1px solid var(--interactive-accent); - font-family: var(--font-monospace); - height: 35px; - padding: 5px 10px; -} - -.workspace-leaf-content[data-type="diff-view"] .d2h-file-header, -.workspace-leaf-content[data-type="diff-view"] .d2h-file-stats { - display: -webkit-box; - display: -ms-flexbox; - display: flex; -} - -.workspace-leaf-content[data-type="diff-view"] .d2h-file-stats { - font-size: 14px; - margin-left: auto; -} - -.workspace-leaf-content[data-type="diff-view"] .d2h-lines-added { - border: 1px solid #b4e2b4; - border-radius: 5px 0 0 5px; - color: #399839; - padding: 2px; - text-align: right; - vertical-align: middle; -} - -.workspace-leaf-content[data-type="diff-view"] .d2h-lines-deleted { - border: 1px solid #e9aeae; - border-radius: 0 5px 5px 0; - color: #c33; - margin-left: 1px; - padding: 2px; - text-align: left; - vertical-align: middle; -} - -.workspace-leaf-content[data-type="diff-view"] .d2h-file-name-wrapper { - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - display: -webkit-box; - display: -ms-flexbox; - display: flex; - font-size: 15px; - width: 100%; -} - -.workspace-leaf-content[data-type="diff-view"] .d2h-file-name { - overflow-x: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} - -.workspace-leaf-content[data-type="diff-view"] .d2h-file-wrapper { - border: 1px solid var(--background-modifier-border); - border-radius: 3px; - margin-bottom: 1em; -} - -.workspace-leaf-content[data-type="diff-view"] .d2h-file-collapse { - -webkit-box-pack: end; - -ms-flex-pack: end; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - border: 1px solid var(--background-modifier-border); - border-radius: 3px; - cursor: pointer; - display: none; - font-size: 12px; - justify-content: flex-end; - padding: 4px 8px; -} - -.workspace-leaf-content[data-type="diff-view"] .d2h-file-collapse.d2h-selected { - background-color: #c8e1ff; -} - -.workspace-leaf-content[data-type="diff-view"] .d2h-file-collapse-input { - margin: 0 4px 0 0; -} - -.workspace-leaf-content[data-type="diff-view"] .d2h-diff-table { - border-collapse: collapse; - font-family: Menlo, Consolas, monospace; - font-size: 13px; - width: 100%; -} - -.workspace-leaf-content[data-type="diff-view"] .d2h-files-diff { - width: 100%; -} - -.workspace-leaf-content[data-type="diff-view"] .d2h-file-diff { - overflow-y: hidden; -} - -.workspace-leaf-content[data-type="diff-view"] .d2h-file-side-diff { - display: inline-block; - margin-bottom: -8px; - margin-right: -4px; - overflow-x: scroll; - overflow-y: hidden; - width: 50%; -} - -.workspace-leaf-content[data-type="diff-view"] .d2h-code-line { - padding: 0 8em; -} - -.workspace-leaf-content[data-type="diff-view"] .d2h-code-line, -.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-line { - display: inline-block; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - white-space: nowrap; - width: 100%; -} - -.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-line { - padding: 0 4.5em; -} - -.workspace-leaf-content[data-type="diff-view"] .d2h-code-line-ctn { - word-wrap: normal; - background: none; - display: inline-block; - padding: 0; - -webkit-user-select: text; - -moz-user-select: text; - -ms-user-select: text; - user-select: text; - vertical-align: middle; - white-space: pre; - width: 100%; -} - -.theme-light .workspace-leaf-content[data-type="diff-view"] .d2h-code-line del, -.theme-light - .workspace-leaf-content[data-type="diff-view"] - .d2h-code-side-line - del { - background-color: #ffb6ba; -} - -.theme-dark .workspace-leaf-content[data-type="diff-view"] .d2h-code-line del, -.theme-dark - .workspace-leaf-content[data-type="diff-view"] - .d2h-code-side-line - del { - background-color: #8d232881; -} - -.workspace-leaf-content[data-type="diff-view"] .d2h-code-line del, -.workspace-leaf-content[data-type="diff-view"] .d2h-code-line ins, -.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-line del, -.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-line ins { - border-radius: 0.2em; - display: inline-block; - margin-top: -1px; - text-decoration: none; - vertical-align: middle; -} - -.theme-light .workspace-leaf-content[data-type="diff-view"] .d2h-code-line ins, -.theme-light - .workspace-leaf-content[data-type="diff-view"] - .d2h-code-side-line - ins { - background-color: #97f295; - text-align: left; -} - -.theme-dark .workspace-leaf-content[data-type="diff-view"] .d2h-code-line ins, -.theme-dark - .workspace-leaf-content[data-type="diff-view"] - .d2h-code-side-line - ins { - background-color: #1d921996; - text-align: left; -} - -.workspace-leaf-content[data-type="diff-view"] .d2h-code-line-prefix { - word-wrap: normal; - background: none; - display: inline; - padding: 0; - white-space: pre; -} - -.workspace-leaf-content[data-type="diff-view"] .line-num1 { - float: left; -} - -.workspace-leaf-content[data-type="diff-view"] .line-num1, -.workspace-leaf-content[data-type="diff-view"] .line-num2 { - -webkit-box-sizing: border-box; - box-sizing: border-box; - overflow: hidden; - padding: 0 0.5em; - text-overflow: ellipsis; - width: 3.5em; -} - -.workspace-leaf-content[data-type="diff-view"] .line-num2 { - float: right; -} - -.workspace-leaf-content[data-type="diff-view"] .d2h-code-linenumber { - background-color: var(--background-primary); - border: solid var(--background-modifier-border); - border-width: 0 1px; - -webkit-box-sizing: border-box; - box-sizing: border-box; - color: var(--text-muted); - cursor: pointer; - display: inline-block; - position: absolute; - text-align: right; - width: 7.5em; -} - -.workspace-leaf-content[data-type="diff-view"] .d2h-code-linenumber:after { - content: "\200b"; -} - -.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-linenumber { - background-color: var(--background-primary); - border: solid var(--background-modifier-border); - border-width: 0 1px; - -webkit-box-sizing: border-box; - box-sizing: border-box; - color: var(--text-muted); - cursor: pointer; - display: inline-block; - overflow: hidden; - padding: 0 0.5em; - position: absolute; - text-align: right; - text-overflow: ellipsis; - width: 4em; -} - -.workspace-leaf-content[data-type="diff-view"] .d2h-diff-tbody tr { - position: relative; -} - -.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-linenumber:after { - content: "\200b"; -} - -.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-emptyplaceholder, -.workspace-leaf-content[data-type="diff-view"] .d2h-emptyplaceholder { - background-color: var(--background-primary); - border-color: var(--background-modifier-border); -} - -.workspace-leaf-content[data-type="diff-view"] .d2h-code-line-prefix, -.workspace-leaf-content[data-type="diff-view"] .d2h-code-linenumber, -.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-linenumber, -.workspace-leaf-content[data-type="diff-view"] .d2h-emptyplaceholder { - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -.workspace-leaf-content[data-type="diff-view"] .d2h-code-linenumber, -.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-linenumber { - direction: rtl; -} - -.theme-light .workspace-leaf-content[data-type="diff-view"] .d2h-del { - background-color: #fee8e9; - border-color: #e9aeae; -} - -.theme-light .workspace-leaf-content[data-type="diff-view"] .d2h-ins { - background-color: #dfd; - border-color: #b4e2b4; -} - -.theme-dark .workspace-leaf-content[data-type="diff-view"] .d2h-del { - background-color: #521b1d83; - border-color: #691d1d73; -} - -.theme-dark .workspace-leaf-content[data-type="diff-view"] .d2h-ins { - background-color: rgba(30, 71, 30, 0.5); - border-color: #13501381; -} - -.workspace-leaf-content[data-type="diff-view"] .d2h-info { - background-color: var(--background-primary); - border-color: var(--background-modifier-border); - color: var(--text-normal); -} - -.theme-light - .workspace-leaf-content[data-type="diff-view"] - .d2h-file-diff - .d2h-del.d2h-change { - background-color: #fdf2d0; -} - -.theme-dark - .workspace-leaf-content[data-type="diff-view"] - .d2h-file-diff - .d2h-del.d2h-change { - background-color: #55492480; -} - -.theme-light - .workspace-leaf-content[data-type="diff-view"] - .d2h-file-diff - .d2h-ins.d2h-change { - background-color: #ded; -} - -.theme-dark - .workspace-leaf-content[data-type="diff-view"] - .d2h-file-diff - .d2h-ins.d2h-change { - background-color: rgba(37, 78, 37, 0.418); -} - -.workspace-leaf-content[data-type="diff-view"] .d2h-file-list-wrapper { - margin-bottom: 10px; -} - -.workspace-leaf-content[data-type="diff-view"] .d2h-file-list-wrapper a { - color: #3572b0; - text-decoration: none; -} - -.workspace-leaf-content[data-type="diff-view"] - .d2h-file-list-wrapper - a:visited { - color: #3572b0; -} - -.workspace-leaf-content[data-type="diff-view"] .d2h-file-list-header { - text-align: left; -} - -.workspace-leaf-content[data-type="diff-view"] .d2h-file-list-title { - font-weight: 700; -} - -.workspace-leaf-content[data-type="diff-view"] .d2h-file-list-line { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - text-align: left; -} - -.workspace-leaf-content[data-type="diff-view"] .d2h-file-list { - display: block; - list-style: none; - margin: 0; - padding: 0; -} - -.workspace-leaf-content[data-type="diff-view"] .d2h-file-list > li { - border-bottom: 1px solid var(--background-modifier-border); - margin: 0; - padding: 5px 10px; -} - -.workspace-leaf-content[data-type="diff-view"] .d2h-file-list > li:last-child { - border-bottom: none; -} - -.workspace-leaf-content[data-type="diff-view"] .d2h-file-switch { - cursor: pointer; - display: none; - font-size: 10px; -} - -.workspace-leaf-content[data-type="diff-view"] .d2h-icon { - fill: currentColor; - margin-right: 10px; - vertical-align: middle; -} - -.workspace-leaf-content[data-type="diff-view"] .d2h-deleted { - color: #c33; -} - -.workspace-leaf-content[data-type="diff-view"] .d2h-added { - color: #399839; -} - -.workspace-leaf-content[data-type="diff-view"] .d2h-changed { - color: #d0b44c; -} - -.workspace-leaf-content[data-type="diff-view"] .d2h-moved { - color: #3572b0; -} - -.workspace-leaf-content[data-type="diff-view"] .d2h-tag { - background-color: var(--background-primary); - display: -webkit-box; - display: -ms-flexbox; - display: flex; - font-size: 10px; - margin-left: 5px; - padding: 0 2px; -} - -.workspace-leaf-content[data-type="diff-view"] .d2h-deleted-tag { - border: 2px solid #c33; -} - -.workspace-leaf-content[data-type="diff-view"] .d2h-added-tag { - border: 1px solid #399839; -} - -.workspace-leaf-content[data-type="diff-view"] .d2h-changed-tag { - border: 1px solid #d0b44c; -} - -.workspace-leaf-content[data-type="diff-view"] .d2h-moved-tag { - border: 1px solid #3572b0; -} - -/* ====================== Line Authoring Information ====================== */ - -.cm-gutterElement.obs-git-blame-gutter { - /* Add background color to spacing inbetween and around the gutter for better aesthetics */ - border-width: 0px 2px 0.2px 2px; - border-style: solid; - border-color: var(--background-secondary); - background-color: var(--background-secondary); -} - -.cm-gutterElement.obs-git-blame-gutter > div, -.line-author-settings-preview { - /* delegate text color to settings */ - color: var(--obs-git-gutter-text); - font-family: monospace; - height: 100%; /* ensure, that age-based background color occupies entire parent */ - text-align: right; - padding: 0px 6px 0px 6px; - white-space: pre; /* Keep spaces and do not collapse them. */ -} - -@media(max-width:800px){ - /* hide git blame gutter not to superpose text */ - .cm-gutterElement.obs-git-blame-gutter { - display: none; - } -} diff --git a/.obsidian/plugins/obsidian-icon-folder/data.json b/.obsidian/plugins/obsidian-icon-folder/data.json deleted file mode 100644 index 78635f4..0000000 --- a/.obsidian/plugins/obsidian-icon-folder/data.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "settings": { - "migrated": 5, - "iconPacksPath": ".obsidian/icons", - "fontSize": 16, - "emojiStyle": "native", - "iconColor": null, - "recentlyUsedIcons": [], - "recentlyUsedIconsSize": 5, - "rules": [], - "extraMargin": { - "top": 0, - "right": 4, - "bottom": 0, - "left": 0 - }, - "iconInTabsEnabled": false, - "iconInTitleEnabled": false, - "iconInTitlePosition": "above", - "iconInFrontmatterEnabled": false, - "iconInFrontmatterFieldName": "icon", - "iconColorInFrontmatterFieldName": "iconColor", - "iconsBackgroundCheckEnabled": false, - "iconsInNotesEnabled": true, - "iconsInLinksEnabled": true, - "iconIdentifier": ":", - "debugMode": false - } -} \ No newline at end of file diff --git a/.obsidian/plugins/obsidian-icon-folder/main.js b/.obsidian/plugins/obsidian-icon-folder/main.js deleted file mode 100644 index ad3a654..0000000 --- a/.obsidian/plugins/obsidian-icon-folder/main.js +++ /dev/null @@ -1,6607 +0,0 @@ -/* -THIS IS A GENERATED/BUNDLED FILE BY ROLLUP -if you want to view the source visit the plugins github repository -*/ - -'use strict'; - -var obsidian = require('obsidian'); -var view = require('@codemirror/view'); -var state = require('@codemirror/state'); -var language = require('@codemirror/language'); - -/****************************************************************************** -Copyright (c) Microsoft Corporation. - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM -LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. -***************************************************************************** */ - -function __awaiter(thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -} - -typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) { - var e = new Error(message); - return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e; -}; - -// This library file does not include any other dependency and is a standalone file that -// only include utility functions for manipulating or extracting svg information. -/** - * Extracts an SVG string from a given input string and returns a cleaned up and - * formatted SVG string. - * @param svgString SVG string to extract from. - * @returns Cleaned up and formatted SVG string. - */ -const extract = (svgString) => { - var _a, _b; - // Removes unnecessary spaces and newlines. - svgString = svgString.replace(/(\r\n|\n|\r)/gm, ''); - svgString = svgString.replace(/>\s+<'); - // Create a parser for better parsing of HTML. - const parser = new DOMParser(); - const svg = parser - .parseFromString(svgString, 'text/html') - .querySelector('svg'); - // Removes `width` and `height` from the `style` attribute. - if (svg.hasAttribute('style')) { - svg.style.width = ''; - svg.style.height = ''; - } - // Add `viewbox`, if it is not already a attribute. - if (svg.viewBox.baseVal.width === 0 && svg.viewBox.baseVal.height === 0) { - const width = (_a = svg.width.baseVal.value) !== null && _a !== void 0 ? _a : 16; - const height = (_b = svg.height.baseVal.value) !== null && _b !== void 0 ? _b : 16; - svg.viewBox.baseVal.width = width; - svg.viewBox.baseVal.height = height; - } - if (!svg.hasAttribute('fill')) { - svg.setAttribute('fill', 'currentColor'); - } - const possibleTitle = svg.querySelector('title'); - if (possibleTitle) { - possibleTitle.remove(); - } - svg.setAttribute('width', '16px'); - svg.setAttribute('height', '16px'); - return svg.outerHTML; -}; -/** - * Sets the font size of an SVG string by modifying its width and/or height attributes. - * The font size will be always set in pixels. - * @param svgString SVG string to modify. - * @param fontSize Font size in pixels to set. - * @returns Modified SVG string. - */ -const setFontSize = (svgString, fontSize) => { - const widthRe = new RegExp(/width="[\d.]+(px)?"/); - const heightRe = new RegExp(/height="[\d.]+(px)?"/); - if (svgString.match(widthRe)) { - svgString = svgString.replace(widthRe, `width="${fontSize}px"`); - } - if (svgString.match(heightRe)) { - svgString = svgString.replace(heightRe, `height="${fontSize}px"`); - } - return svgString; -}; -/** - * Replaces the fill or stroke color of an SVG string with a given color. - * @param svgString SVG string to modify. - * @param color Color to set. Defaults to 'currentColor'. - * @returns The modified SVG string. - */ -const colorize = (svgString, color) => { - if (!color) { - color = 'currentColor'; - } - const parser = new DOMParser(); - // Tries to parse the string into a HTML node. - const parsedNode = parser.parseFromString(svgString, 'text/html'); - const svg = parsedNode.querySelector('svg'); - if (svg) { - if (svg.hasAttribute('fill') && svg.getAttribute('fill') !== 'none') { - svg.setAttribute('fill', color); - } - else if (svg.hasAttribute('stroke') && - svg.getAttribute('stroke') !== 'none') { - svg.setAttribute('stroke', color); - } - return svg.outerHTML; - } - return svgString; -}; -var svg = { - extract, - colorize, - setFontSize, -}; - -var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; - -function commonjsRequire(path) { - throw new Error('Could not dynamically require "' + path + '". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.'); -} - -var jszip_min = {exports: {}}; - -/*! - -JSZip v3.10.1 - A JavaScript class for generating and reading zip files - - -(c) 2009-2016 Stuart Knightley -Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/main/LICENSE.markdown. - -JSZip uses the library pako released under the MIT license : -https://github.com/nodeca/pako/blob/main/LICENSE -*/ -jszip_min.exports; - -(function (module, exports) { - !function(e){module.exports=e();}(function(){return function s(a,o,h){function u(r,e){if(!o[r]){if(!a[r]){var t="function"==typeof commonjsRequire&&commonjsRequire;if(!e&&t)return t(r,!0);if(l)return l(r,!0);var n=new Error("Cannot find module '"+r+"'");throw n.code="MODULE_NOT_FOUND",n}var i=o[r]={exports:{}};a[r][0].call(i.exports,function(e){var t=a[r][1][e];return u(t||e)},i,i.exports,s,a,o,h);}return o[r].exports}for(var l="function"==typeof commonjsRequire&&commonjsRequire,e=0;e>2,s=(3&t)<<4|r>>4,a=1>6:64,o=2>4,r=(15&i)<<4|(s=p.indexOf(e.charAt(o++)))>>2,n=(3&s)<<6|(a=p.indexOf(e.charAt(o++))),l[h++]=t,64!==s&&(l[h++]=r),64!==a&&(l[h++]=n);return l};},{"./support":30,"./utils":32}],2:[function(e,t,r){var n=e("./external"),i=e("./stream/DataWorker"),s=e("./stream/Crc32Probe"),a=e("./stream/DataLengthProbe");function o(e,t,r,n,i){this.compressedSize=e,this.uncompressedSize=t,this.crc32=r,this.compression=n,this.compressedContent=i;}o.prototype={getContentWorker:function(){var e=new i(n.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new a("data_length")),t=this;return e.on("end",function(){if(this.streamInfo.data_length!==t.uncompressedSize)throw new Error("Bug : uncompressed data size mismatch")}),e},getCompressedWorker:function(){return new i(n.Promise.resolve(this.compressedContent)).withStreamInfo("compressedSize",this.compressedSize).withStreamInfo("uncompressedSize",this.uncompressedSize).withStreamInfo("crc32",this.crc32).withStreamInfo("compression",this.compression)}},o.createWorkerFrom=function(e,t,r){return e.pipe(new s).pipe(new a("uncompressedSize")).pipe(t.compressWorker(r)).pipe(new a("compressedSize")).withStreamInfo("compression",t)},t.exports=o;},{"./external":6,"./stream/Crc32Probe":25,"./stream/DataLengthProbe":26,"./stream/DataWorker":27}],3:[function(e,t,r){var n=e("./stream/GenericWorker");r.STORE={magic:"\0\0",compressWorker:function(){return new n("STORE compression")},uncompressWorker:function(){return new n("STORE decompression")}},r.DEFLATE=e("./flate");},{"./flate":7,"./stream/GenericWorker":28}],4:[function(e,t,r){var n=e("./utils");var o=function(){for(var e,t=[],r=0;r<256;r++){e=r;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[r]=e;}return t}();t.exports=function(e,t){return void 0!==e&&e.length?"string"!==n.getTypeOf(e)?function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a>>8^i[255&(e^t[a])];return -1^e}(0|t,e,e.length,0):function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a>>8^i[255&(e^t.charCodeAt(a))];return -1^e}(0|t,e,e.length,0):0};},{"./utils":32}],5:[function(e,t,r){r.base64=!1,r.binary=!1,r.dir=!1,r.createFolders=!0,r.date=null,r.compression=null,r.compressionOptions=null,r.comment=null,r.unixPermissions=null,r.dosPermissions=null;},{}],6:[function(e,t,r){var n=null;n="undefined"!=typeof Promise?Promise:e("lie"),t.exports={Promise:n};},{lie:37}],7:[function(e,t,r){var n="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Uint32Array,i=e("pako"),s=e("./utils"),a=e("./stream/GenericWorker"),o=n?"uint8array":"array";function h(e,t){a.call(this,"FlateWorker/"+e),this._pako=null,this._pakoAction=e,this._pakoOptions=t,this.meta={};}r.magic="\b\0",s.inherits(h,a),h.prototype.processChunk=function(e){this.meta=e.meta,null===this._pako&&this._createPako(),this._pako.push(s.transformTo(o,e.data),!1);},h.prototype.flush=function(){a.prototype.flush.call(this),null===this._pako&&this._createPako(),this._pako.push([],!0);},h.prototype.cleanUp=function(){a.prototype.cleanUp.call(this),this._pako=null;},h.prototype._createPako=function(){this._pako=new i[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var t=this;this._pako.onData=function(e){t.push({data:e,meta:t.meta});};},r.compressWorker=function(e){return new h("Deflate",e)},r.uncompressWorker=function(){return new h("Inflate",{})};},{"./stream/GenericWorker":28,"./utils":32,pako:38}],8:[function(e,t,r){function A(e,t){var r,n="";for(r=0;r>>=8;return n}function n(e,t,r,n,i,s){var a,o,h=e.file,u=e.compression,l=s!==O.utf8encode,f=I.transformTo("string",s(h.name)),c=I.transformTo("string",O.utf8encode(h.name)),d=h.comment,p=I.transformTo("string",s(d)),m=I.transformTo("string",O.utf8encode(d)),_=c.length!==h.name.length,g=m.length!==d.length,b="",v="",y="",w=h.dir,k=h.date,x={crc32:0,compressedSize:0,uncompressedSize:0};t&&!r||(x.crc32=e.crc32,x.compressedSize=e.compressedSize,x.uncompressedSize=e.uncompressedSize);var S=0;t&&(S|=8),l||!_&&!g||(S|=2048);var z=0,C=0;w&&(z|=16),"UNIX"===i?(C=798,z|=function(e,t){var r=e;return e||(r=t?16893:33204),(65535&r)<<16}(h.unixPermissions,w)):(C=20,z|=function(e){return 63&(e||0)}(h.dosPermissions)),a=k.getUTCHours(),a<<=6,a|=k.getUTCMinutes(),a<<=5,a|=k.getUTCSeconds()/2,o=k.getUTCFullYear()-1980,o<<=4,o|=k.getUTCMonth()+1,o<<=5,o|=k.getUTCDate(),_&&(v=A(1,1)+A(B(f),4)+c,b+="up"+A(v.length,2)+v),g&&(y=A(1,1)+A(B(p),4)+m,b+="uc"+A(y.length,2)+y);var E="";return E+="\n\0",E+=A(S,2),E+=u.magic,E+=A(a,2),E+=A(o,2),E+=A(x.crc32,4),E+=A(x.compressedSize,4),E+=A(x.uncompressedSize,4),E+=A(f.length,2),E+=A(b.length,2),{fileRecord:R.LOCAL_FILE_HEADER+E+f+b,dirRecord:R.CENTRAL_FILE_HEADER+A(C,2)+E+A(p.length,2)+"\0\0\0\0"+A(z,4)+A(n,4)+f+b+p}}var I=e("../utils"),i=e("../stream/GenericWorker"),O=e("../utf8"),B=e("../crc32"),R=e("../signature");function s(e,t,r,n){i.call(this,"ZipFileWorker"),this.bytesWritten=0,this.zipComment=t,this.zipPlatform=r,this.encodeFileName=n,this.streamFiles=e,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[];}I.inherits(s,i),s.prototype.push=function(e){var t=e.meta.percent||0,r=this.entriesCount,n=this._sources.length;this.accumulate?this.contentBuffer.push(e):(this.bytesWritten+=e.data.length,i.prototype.push.call(this,{data:e.data,meta:{currentFile:this.currentFile,percent:r?(t+100*(r-n-1))/r:100}}));},s.prototype.openedSource=function(e){this.currentSourceOffset=this.bytesWritten,this.currentFile=e.file.name;var t=this.streamFiles&&!e.file.dir;if(t){var r=n(e,t,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:r.fileRecord,meta:{percent:0}});}else this.accumulate=!0;},s.prototype.closedSource=function(e){this.accumulate=!1;var t=this.streamFiles&&!e.file.dir,r=n(e,t,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(r.dirRecord),t)this.push({data:function(e){return R.DATA_DESCRIPTOR+A(e.crc32,4)+A(e.compressedSize,4)+A(e.uncompressedSize,4)}(e),meta:{percent:100}});else for(this.push({data:r.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null;},s.prototype.flush=function(){for(var e=this.bytesWritten,t=0;t=this.index;t--)r=(r<<8)+this.byteAt(t);return this.index+=e,r},readString:function(e){return n.transformTo("string",this.readData(e))},readData:function(){},lastIndexOfSignature:function(){},readAndCheckSignature:function(){},readDate:function(){var e=this.readInt(4);return new Date(Date.UTC(1980+(e>>25&127),(e>>21&15)-1,e>>16&31,e>>11&31,e>>5&63,(31&e)<<1))}},t.exports=i;},{"../utils":32}],19:[function(e,t,r){var n=e("./Uint8ArrayReader");function i(e){n.call(this,e);}e("../utils").inherits(i,n),i.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i;},{"../utils":32,"./Uint8ArrayReader":21}],20:[function(e,t,r){var n=e("./DataReader");function i(e){n.call(this,e);}e("../utils").inherits(i,n),i.prototype.byteAt=function(e){return this.data.charCodeAt(this.zero+e)},i.prototype.lastIndexOfSignature=function(e){return this.data.lastIndexOf(e)-this.zero},i.prototype.readAndCheckSignature=function(e){return e===this.readData(4)},i.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i;},{"../utils":32,"./DataReader":18}],21:[function(e,t,r){var n=e("./ArrayReader");function i(e){n.call(this,e);}e("../utils").inherits(i,n),i.prototype.readData=function(e){if(this.checkOffset(e),0===e)return new Uint8Array(0);var t=this.data.subarray(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i;},{"../utils":32,"./ArrayReader":17}],22:[function(e,t,r){var n=e("../utils"),i=e("../support"),s=e("./ArrayReader"),a=e("./StringReader"),o=e("./NodeBufferReader"),h=e("./Uint8ArrayReader");t.exports=function(e){var t=n.getTypeOf(e);return n.checkSupport(t),"string"!==t||i.uint8array?"nodebuffer"===t?new o(e):i.uint8array?new h(n.transformTo("uint8array",e)):new s(n.transformTo("array",e)):new a(e)};},{"../support":30,"../utils":32,"./ArrayReader":17,"./NodeBufferReader":19,"./StringReader":20,"./Uint8ArrayReader":21}],23:[function(e,t,r){r.LOCAL_FILE_HEADER="PK",r.CENTRAL_FILE_HEADER="PK",r.CENTRAL_DIRECTORY_END="PK",r.ZIP64_CENTRAL_DIRECTORY_LOCATOR="PK",r.ZIP64_CENTRAL_DIRECTORY_END="PK",r.DATA_DESCRIPTOR="PK\b";},{}],24:[function(e,t,r){var n=e("./GenericWorker"),i=e("../utils");function s(e){n.call(this,"ConvertWorker to "+e),this.destType=e;}i.inherits(s,n),s.prototype.processChunk=function(e){this.push({data:i.transformTo(this.destType,e.data),meta:e.meta});},t.exports=s;},{"../utils":32,"./GenericWorker":28}],25:[function(e,t,r){var n=e("./GenericWorker"),i=e("../crc32");function s(){n.call(this,"Crc32Probe"),this.withStreamInfo("crc32",0);}e("../utils").inherits(s,n),s.prototype.processChunk=function(e){this.streamInfo.crc32=i(e.data,this.streamInfo.crc32||0),this.push(e);},t.exports=s;},{"../crc32":4,"../utils":32,"./GenericWorker":28}],26:[function(e,t,r){var n=e("../utils"),i=e("./GenericWorker");function s(e){i.call(this,"DataLengthProbe for "+e),this.propName=e,this.withStreamInfo(e,0);}n.inherits(s,i),s.prototype.processChunk=function(e){if(e){var t=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=t+e.data.length;}i.prototype.processChunk.call(this,e);},t.exports=s;},{"../utils":32,"./GenericWorker":28}],27:[function(e,t,r){var n=e("../utils"),i=e("./GenericWorker");function s(e){i.call(this,"DataWorker");var t=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type="",this._tickScheduled=!1,e.then(function(e){t.dataIsReady=!0,t.data=e,t.max=e&&e.length||0,t.type=n.getTypeOf(e),t.isPaused||t._tickAndRepeat();},function(e){t.error(e);});}n.inherits(s,i),s.prototype.cleanUp=function(){i.prototype.cleanUp.call(this),this.data=null;},s.prototype.resume=function(){return !!i.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,n.delay(this._tickAndRepeat,[],this)),!0)},s.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(n.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0));},s.prototype._tick=function(){if(this.isPaused||this.isFinished)return !1;var e=null,t=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case"string":e=this.data.substring(this.index,t);break;case"uint8array":e=this.data.subarray(this.index,t);break;case"array":case"nodebuffer":e=this.data.slice(this.index,t);}return this.index=t,this.push({data:e,meta:{percent:this.max?this.index/this.max*100:0}})},t.exports=s;},{"../utils":32,"./GenericWorker":28}],28:[function(e,t,r){function n(e){this.name=e||"default",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null;}n.prototype={push:function(e){this.emit("data",e);},end:function(){if(this.isFinished)return !1;this.flush();try{this.emit("end"),this.cleanUp(),this.isFinished=!0;}catch(e){this.emit("error",e);}return !0},error:function(e){return !this.isFinished&&(this.isPaused?this.generatedError=e:(this.isFinished=!0,this.emit("error",e),this.previous&&this.previous.error(e),this.cleanUp()),!0)},on:function(e,t){return this._listeners[e].push(t),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[];},emit:function(e,t){if(this._listeners[e])for(var r=0;r "+e:e}},t.exports=n;},{}],29:[function(e,t,r){var h=e("../utils"),i=e("./ConvertWorker"),s=e("./GenericWorker"),u=e("../base64"),n=e("../support"),a=e("../external"),o=null;if(n.nodestream)try{o=e("../nodejs/NodejsStreamOutputAdapter");}catch(e){}function l(e,o){return new a.Promise(function(t,r){var n=[],i=e._internalType,s=e._outputType,a=e._mimeType;e.on("data",function(e,t){n.push(e),o&&o(t);}).on("error",function(e){n=[],r(e);}).on("end",function(){try{var e=function(e,t,r){switch(e){case"blob":return h.newBlob(h.transformTo("arraybuffer",t),r);case"base64":return u.encode(t);default:return h.transformTo(e,t)}}(s,function(e,t){var r,n=0,i=null,s=0;for(r=0;r>>6:(r<65536?t[s++]=224|r>>>12:(t[s++]=240|r>>>18,t[s++]=128|r>>>12&63),t[s++]=128|r>>>6&63),t[s++]=128|63&r);return t}(e)},s.utf8decode=function(e){return h.nodebuffer?o.transformTo("nodebuffer",e).toString("utf-8"):function(e){var t,r,n,i,s=e.length,a=new Array(2*s);for(t=r=0;t>10&1023,a[r++]=56320|1023&n);}return a.length!==r&&(a.subarray?a=a.subarray(0,r):a.length=r),o.applyFromCharCode(a)}(e=o.transformTo(h.uint8array?"uint8array":"array",e))},o.inherits(a,n),a.prototype.processChunk=function(e){var t=o.transformTo(h.uint8array?"uint8array":"array",e.data);if(this.leftOver&&this.leftOver.length){if(h.uint8array){var r=t;(t=new Uint8Array(r.length+this.leftOver.length)).set(this.leftOver,0),t.set(r,this.leftOver.length);}else t=this.leftOver.concat(t);this.leftOver=null;}var n=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0?t:0===r?t:r+u[e[r]]>t?r:t}(t),i=t;n!==t.length&&(h.uint8array?(i=t.subarray(0,n),this.leftOver=t.subarray(n,t.length)):(i=t.slice(0,n),this.leftOver=t.slice(n,t.length))),this.push({data:s.utf8decode(i),meta:e.meta});},a.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:s.utf8decode(this.leftOver),meta:{}}),this.leftOver=null);},s.Utf8DecodeWorker=a,o.inherits(l,n),l.prototype.processChunk=function(e){this.push({data:s.utf8encode(e.data),meta:e.meta});},s.Utf8EncodeWorker=l;},{"./nodejsUtils":14,"./stream/GenericWorker":28,"./support":30,"./utils":32}],32:[function(e,t,a){var o=e("./support"),h=e("./base64"),r=e("./nodejsUtils"),u=e("./external");function n(e){return e}function l(e,t){for(var r=0;r>8;this.dir=!!(16&this.externalFileAttributes),0==e&&(this.dosPermissions=63&this.externalFileAttributes),3==e&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||"/"!==this.fileNameStr.slice(-1)||(this.dir=!0);},parseZIP64ExtraField:function(){if(this.extraFields[1]){var e=n(this.extraFields[1].value);this.uncompressedSize===s.MAX_VALUE_32BITS&&(this.uncompressedSize=e.readInt(8)),this.compressedSize===s.MAX_VALUE_32BITS&&(this.compressedSize=e.readInt(8)),this.localHeaderOffset===s.MAX_VALUE_32BITS&&(this.localHeaderOffset=e.readInt(8)),this.diskNumberStart===s.MAX_VALUE_32BITS&&(this.diskNumberStart=e.readInt(4));}},readExtraFields:function(e){var t,r,n,i=e.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});e.index+4>>6:(r<65536?t[s++]=224|r>>>12:(t[s++]=240|r>>>18,t[s++]=128|r>>>12&63),t[s++]=128|r>>>6&63),t[s++]=128|63&r);return t},r.buf2binstring=function(e){return l(e,e.length)},r.binstring2buf=function(e){for(var t=new h.Buf8(e.length),r=0,n=t.length;r>10&1023,o[n++]=56320|1023&i);}return l(o,n)},r.utf8border=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0?t:0===r?t:r+u[e[r]]>t?r:t};},{"./common":41}],43:[function(e,t,r){t.exports=function(e,t,r,n){for(var i=65535&e|0,s=e>>>16&65535|0,a=0;0!==r;){for(r-=a=2e3>>1:e>>>1;t[r]=e;}return t}();t.exports=function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a>>8^i[255&(e^t[a])];return -1^e};},{}],46:[function(e,t,r){var h,c=e("../utils/common"),u=e("./trees"),d=e("./adler32"),p=e("./crc32"),n=e("./messages"),l=0,f=4,m=0,_=-2,g=-1,b=4,i=2,v=8,y=9,s=286,a=30,o=19,w=2*s+1,k=15,x=3,S=258,z=S+x+1,C=42,E=113,A=1,I=2,O=3,B=4;function R(e,t){return e.msg=n[t],t}function T(e){return (e<<1)-(4e.avail_out&&(r=e.avail_out),0!==r&&(c.arraySet(e.output,t.pending_buf,t.pending_out,r,e.next_out),e.next_out+=r,t.pending_out+=r,e.total_out+=r,e.avail_out-=r,t.pending-=r,0===t.pending&&(t.pending_out=0));}function N(e,t){u._tr_flush_block(e,0<=e.block_start?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,F(e.strm);}function U(e,t){e.pending_buf[e.pending++]=t;}function P(e,t){e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t;}function L(e,t){var r,n,i=e.max_chain_length,s=e.strstart,a=e.prev_length,o=e.nice_match,h=e.strstart>e.w_size-z?e.strstart-(e.w_size-z):0,u=e.window,l=e.w_mask,f=e.prev,c=e.strstart+S,d=u[s+a-1],p=u[s+a];e.prev_length>=e.good_match&&(i>>=2),o>e.lookahead&&(o=e.lookahead);do{if(u[(r=t)+a]===p&&u[r+a-1]===d&&u[r]===u[s]&&u[++r]===u[s+1]){s+=2,r++;do{}while(u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&sh&&0!=--i);return a<=e.lookahead?a:e.lookahead}function j(e){var t,r,n,i,s,a,o,h,u,l,f=e.w_size;do{if(i=e.window_size-e.lookahead-e.strstart,e.strstart>=f+(f-z)){for(c.arraySet(e.window,e.window,f,f,0),e.match_start-=f,e.strstart-=f,e.block_start-=f,t=r=e.hash_size;n=e.head[--t],e.head[t]=f<=n?n-f:0,--r;);for(t=r=f;n=e.prev[--t],e.prev[t]=f<=n?n-f:0,--r;);i+=f;}if(0===e.strm.avail_in)break;if(a=e.strm,o=e.window,h=e.strstart+e.lookahead,u=i,l=void 0,l=a.avail_in,u=x)for(s=e.strstart-e.insert,e.ins_h=e.window[s],e.ins_h=(e.ins_h<=x&&(e.ins_h=(e.ins_h<=x)if(n=u._tr_tally(e,e.strstart-e.match_start,e.match_length-x),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=x){for(e.match_length--;e.strstart++,e.ins_h=(e.ins_h<=x&&(e.ins_h=(e.ins_h<=x&&e.match_length<=e.prev_length){for(i=e.strstart+e.lookahead-x,n=u._tr_tally(e,e.strstart-1-e.prev_match,e.prev_length-x),e.lookahead-=e.prev_length-1,e.prev_length-=2;++e.strstart<=i&&(e.ins_h=(e.ins_h<e.pending_buf_size-5&&(r=e.pending_buf_size-5);;){if(e.lookahead<=1){if(j(e),0===e.lookahead&&t===l)return A;if(0===e.lookahead)break}e.strstart+=e.lookahead,e.lookahead=0;var n=e.block_start+r;if((0===e.strstart||e.strstart>=n)&&(e.lookahead=e.strstart-n,e.strstart=n,N(e,!1),0===e.strm.avail_out))return A;if(e.strstart-e.block_start>=e.w_size-z&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):(e.strstart>e.block_start&&(N(e,!1),e.strm.avail_out),A)}),new M(4,4,8,4,Z),new M(4,5,16,8,Z),new M(4,6,32,32,Z),new M(4,4,16,16,W),new M(8,16,32,32,W),new M(8,16,128,128,W),new M(8,32,128,256,W),new M(32,128,258,1024,W),new M(32,258,258,4096,W)],r.deflateInit=function(e,t){return Y(e,t,v,15,8,0)},r.deflateInit2=Y,r.deflateReset=K,r.deflateResetKeep=G,r.deflateSetHeader=function(e,t){return e&&e.state?2!==e.state.wrap?_:(e.state.gzhead=t,m):_},r.deflate=function(e,t){var r,n,i,s;if(!e||!e.state||5>8&255),U(n,n.gzhead.time>>16&255),U(n,n.gzhead.time>>24&255),U(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),U(n,255&n.gzhead.os),n.gzhead.extra&&n.gzhead.extra.length&&(U(n,255&n.gzhead.extra.length),U(n,n.gzhead.extra.length>>8&255)),n.gzhead.hcrc&&(e.adler=p(e.adler,n.pending_buf,n.pending,0)),n.gzindex=0,n.status=69):(U(n,0),U(n,0),U(n,0),U(n,0),U(n,0),U(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),U(n,3),n.status=E);else {var a=v+(n.w_bits-8<<4)<<8;a|=(2<=n.strategy||n.level<2?0:n.level<6?1:6===n.level?2:3)<<6,0!==n.strstart&&(a|=32),a+=31-a%31,n.status=E,P(n,a),0!==n.strstart&&(P(n,e.adler>>>16),P(n,65535&e.adler)),e.adler=1;}if(69===n.status)if(n.gzhead.extra){for(i=n.pending;n.gzindex<(65535&n.gzhead.extra.length)&&(n.pending!==n.pending_buf_size||(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending!==n.pending_buf_size));)U(n,255&n.gzhead.extra[n.gzindex]),n.gzindex++;n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),n.gzindex===n.gzhead.extra.length&&(n.gzindex=0,n.status=73);}else n.status=73;if(73===n.status)if(n.gzhead.name){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending===n.pending_buf_size)){s=1;break}s=n.gzindexi&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),0===s&&(n.gzindex=0,n.status=91);}else n.status=91;if(91===n.status)if(n.gzhead.comment){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending===n.pending_buf_size)){s=1;break}s=n.gzindexi&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),0===s&&(n.status=103);}else n.status=103;if(103===n.status&&(n.gzhead.hcrc?(n.pending+2>n.pending_buf_size&&F(e),n.pending+2<=n.pending_buf_size&&(U(n,255&e.adler),U(n,e.adler>>8&255),e.adler=0,n.status=E)):n.status=E),0!==n.pending){if(F(e),0===e.avail_out)return n.last_flush=-1,m}else if(0===e.avail_in&&T(t)<=T(r)&&t!==f)return R(e,-5);if(666===n.status&&0!==e.avail_in)return R(e,-5);if(0!==e.avail_in||0!==n.lookahead||t!==l&&666!==n.status){var o=2===n.strategy?function(e,t){for(var r;;){if(0===e.lookahead&&(j(e),0===e.lookahead)){if(t===l)return A;break}if(e.match_length=0,r=u._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,r&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}(n,t):3===n.strategy?function(e,t){for(var r,n,i,s,a=e.window;;){if(e.lookahead<=S){if(j(e),e.lookahead<=S&&t===l)return A;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=x&&0e.lookahead&&(e.match_length=e.lookahead);}if(e.match_length>=x?(r=u._tr_tally(e,1,e.match_length-x),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(r=u._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),r&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}(n,t):h[n.level].func(n,t);if(o!==O&&o!==B||(n.status=666),o===A||o===O)return 0===e.avail_out&&(n.last_flush=-1),m;if(o===I&&(1===t?u._tr_align(n):5!==t&&(u._tr_stored_block(n,0,0,!1),3===t&&(D(n.head),0===n.lookahead&&(n.strstart=0,n.block_start=0,n.insert=0))),F(e),0===e.avail_out))return n.last_flush=-1,m}return t!==f?m:n.wrap<=0?1:(2===n.wrap?(U(n,255&e.adler),U(n,e.adler>>8&255),U(n,e.adler>>16&255),U(n,e.adler>>24&255),U(n,255&e.total_in),U(n,e.total_in>>8&255),U(n,e.total_in>>16&255),U(n,e.total_in>>24&255)):(P(n,e.adler>>>16),P(n,65535&e.adler)),F(e),0=r.w_size&&(0===s&&(D(r.head),r.strstart=0,r.block_start=0,r.insert=0),u=new c.Buf8(r.w_size),c.arraySet(u,t,l-r.w_size,r.w_size,0),t=u,l=r.w_size),a=e.avail_in,o=e.next_in,h=e.input,e.avail_in=l,e.next_in=0,e.input=t,j(r);r.lookahead>=x;){for(n=r.strstart,i=r.lookahead-(x-1);r.ins_h=(r.ins_h<>>=y=v>>>24,p-=y,0===(y=v>>>16&255))C[s++]=65535&v;else {if(!(16&y)){if(0==(64&y)){v=m[(65535&v)+(d&(1<>>=y,p-=y),p<15&&(d+=z[n++]<>>=y=v>>>24,p-=y,!(16&(y=v>>>16&255))){if(0==(64&y)){v=_[(65535&v)+(d&(1<>>=y,p-=y,(y=s-a)>3,d&=(1<<(p-=w<<3))-1,e.next_in=n,e.next_out=s,e.avail_in=n>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function s(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new I.Buf16(320),this.work=new I.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0;}function a(e){var t;return e&&e.state?(t=e.state,e.total_in=e.total_out=t.total=0,e.msg="",t.wrap&&(e.adler=1&t.wrap),t.mode=P,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new I.Buf32(n),t.distcode=t.distdyn=new I.Buf32(i),t.sane=1,t.back=-1,N):U}function o(e){var t;return e&&e.state?((t=e.state).wsize=0,t.whave=0,t.wnext=0,a(e)):U}function h(e,t){var r,n;return e&&e.state?(n=e.state,t<0?(r=0,t=-t):(r=1+(t>>4),t<48&&(t&=15)),t&&(t<8||15=s.wsize?(I.arraySet(s.window,t,r-s.wsize,s.wsize,0),s.wnext=0,s.whave=s.wsize):(n<(i=s.wsize-s.wnext)&&(i=n),I.arraySet(s.window,t,r-n,i,s.wnext),(n-=i)?(I.arraySet(s.window,t,r-n,n,0),s.wnext=n,s.whave=s.wsize):(s.wnext+=i,s.wnext===s.wsize&&(s.wnext=0),s.whave>>8&255,r.check=B(r.check,E,2,0),l=u=0,r.mode=2;break}if(r.flags=0,r.head&&(r.head.done=!1),!(1&r.wrap)||(((255&u)<<8)+(u>>8))%31){e.msg="incorrect header check",r.mode=30;break}if(8!=(15&u)){e.msg="unknown compression method",r.mode=30;break}if(l-=4,k=8+(15&(u>>>=4)),0===r.wbits)r.wbits=k;else if(k>r.wbits){e.msg="invalid window size",r.mode=30;break}r.dmax=1<>8&1),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0,r.mode=3;case 3:for(;l<32;){if(0===o)break e;o--,u+=n[s++]<>>8&255,E[2]=u>>>16&255,E[3]=u>>>24&255,r.check=B(r.check,E,4,0)),l=u=0,r.mode=4;case 4:for(;l<16;){if(0===o)break e;o--,u+=n[s++]<>8),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0,r.mode=5;case 5:if(1024&r.flags){for(;l<16;){if(0===o)break e;o--,u+=n[s++]<>>8&255,r.check=B(r.check,E,2,0)),l=u=0;}else r.head&&(r.head.extra=null);r.mode=6;case 6:if(1024&r.flags&&(o<(d=r.length)&&(d=o),d&&(r.head&&(k=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Array(r.head.extra_len)),I.arraySet(r.head.extra,n,s,d,k)),512&r.flags&&(r.check=B(r.check,n,d,s)),o-=d,s+=d,r.length-=d),r.length))break e;r.length=0,r.mode=7;case 7:if(2048&r.flags){if(0===o)break e;for(d=0;k=n[s+d++],r.head&&k&&r.length<65536&&(r.head.name+=String.fromCharCode(k)),k&&d>9&1,r.head.done=!0),e.adler=r.check=0,r.mode=12;break;case 10:for(;l<32;){if(0===o)break e;o--,u+=n[s++]<>>=7&l,l-=7&l,r.mode=27;break}for(;l<3;){if(0===o)break e;o--,u+=n[s++]<>>=1)){case 0:r.mode=14;break;case 1:if(j(r),r.mode=20,6!==t)break;u>>>=2,l-=2;break e;case 2:r.mode=17;break;case 3:e.msg="invalid block type",r.mode=30;}u>>>=2,l-=2;break;case 14:for(u>>>=7&l,l-=7&l;l<32;){if(0===o)break e;o--,u+=n[s++]<>>16^65535)){e.msg="invalid stored block lengths",r.mode=30;break}if(r.length=65535&u,l=u=0,r.mode=15,6===t)break e;case 15:r.mode=16;case 16:if(d=r.length){if(o>>=5,l-=5,r.ndist=1+(31&u),u>>>=5,l-=5,r.ncode=4+(15&u),u>>>=4,l-=4,286>>=3,l-=3;}for(;r.have<19;)r.lens[A[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,S={bits:r.lenbits},x=T(0,r.lens,0,19,r.lencode,0,r.work,S),r.lenbits=S.bits,x){e.msg="invalid code lengths set",r.mode=30;break}r.have=0,r.mode=19;case 19:for(;r.have>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>>=_,l-=_,r.lens[r.have++]=b;else {if(16===b){for(z=_+2;l>>=_,l-=_,0===r.have){e.msg="invalid bit length repeat",r.mode=30;break}k=r.lens[r.have-1],d=3+(3&u),u>>>=2,l-=2;}else if(17===b){for(z=_+3;l>>=_)),u>>>=3,l-=3;}else {for(z=_+7;l>>=_)),u>>>=7,l-=7;}if(r.have+d>r.nlen+r.ndist){e.msg="invalid bit length repeat",r.mode=30;break}for(;d--;)r.lens[r.have++]=k;}}if(30===r.mode)break;if(0===r.lens[256]){e.msg="invalid code -- missing end-of-block",r.mode=30;break}if(r.lenbits=9,S={bits:r.lenbits},x=T(D,r.lens,0,r.nlen,r.lencode,0,r.work,S),r.lenbits=S.bits,x){e.msg="invalid literal/lengths set",r.mode=30;break}if(r.distbits=6,r.distcode=r.distdyn,S={bits:r.distbits},x=T(F,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,S),r.distbits=S.bits,x){e.msg="invalid distances set",r.mode=30;break}if(r.mode=20,6===t)break e;case 20:r.mode=21;case 21:if(6<=o&&258<=h){e.next_out=a,e.avail_out=h,e.next_in=s,e.avail_in=o,r.hold=u,r.bits=l,R(e,c),a=e.next_out,i=e.output,h=e.avail_out,s=e.next_in,n=e.input,o=e.avail_in,u=r.hold,l=r.bits,12===r.mode&&(r.back=-1);break}for(r.back=0;g=(C=r.lencode[u&(1<>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>v)])>>>16&255,b=65535&C,!(v+(_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>>=v,l-=v,r.back+=v;}if(u>>>=_,l-=_,r.back+=_,r.length=b,0===g){r.mode=26;break}if(32&g){r.back=-1,r.mode=12;break}if(64&g){e.msg="invalid literal/length code",r.mode=30;break}r.extra=15&g,r.mode=22;case 22:if(r.extra){for(z=r.extra;l>>=r.extra,l-=r.extra,r.back+=r.extra;}r.was=r.length,r.mode=23;case 23:for(;g=(C=r.distcode[u&(1<>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>v)])>>>16&255,b=65535&C,!(v+(_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>>=v,l-=v,r.back+=v;}if(u>>>=_,l-=_,r.back+=_,64&g){e.msg="invalid distance code",r.mode=30;break}r.offset=b,r.extra=15&g,r.mode=24;case 24:if(r.extra){for(z=r.extra;l>>=r.extra,l-=r.extra,r.back+=r.extra;}if(r.offset>r.dmax){e.msg="invalid distance too far back",r.mode=30;break}r.mode=25;case 25:if(0===h)break e;if(d=c-h,r.offset>d){if((d=r.offset-d)>r.whave&&r.sane){e.msg="invalid distance too far back",r.mode=30;break}p=d>r.wnext?(d-=r.wnext,r.wsize-d):r.wnext-d,d>r.length&&(d=r.length),m=r.window;}else m=i,p=a-r.offset,d=r.length;for(hd?(m=R[T+a[v]],A[I+a[v]]):(m=96,0),h=1<>S)+(u-=h)]=p<<24|m<<16|_|0,0!==u;);for(h=1<>=1;if(0!==h?(E&=h-1,E+=h):E=0,v++,0==--O[b]){if(b===w)break;b=t[r+a[v]];}if(k>>7)]}function U(e,t){e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255;}function P(e,t,r){e.bi_valid>d-r?(e.bi_buf|=t<>d-e.bi_valid,e.bi_valid+=r-d):(e.bi_buf|=t<>>=1,r<<=1,0<--t;);return r>>>1}function Z(e,t,r){var n,i,s=new Array(g+1),a=0;for(n=1;n<=g;n++)s[n]=a=a+r[n-1]<<1;for(i=0;i<=t;i++){var o=e[2*i+1];0!==o&&(e[2*i]=j(s[o]++,o));}}function W(e){var t;for(t=0;t>1;1<=r;r--)G(e,s,r);for(i=h;r=e.heap[1],e.heap[1]=e.heap[e.heap_len--],G(e,s,1),n=e.heap[1],e.heap[--e.heap_max]=r,e.heap[--e.heap_max]=n,s[2*i]=s[2*r]+s[2*n],e.depth[i]=(e.depth[r]>=e.depth[n]?e.depth[r]:e.depth[n])+1,s[2*r+1]=s[2*n+1]=i,e.heap[1]=i++,G(e,s,1),2<=e.heap_len;);e.heap[--e.heap_max]=e.heap[1],function(e,t){var r,n,i,s,a,o,h=t.dyn_tree,u=t.max_code,l=t.stat_desc.static_tree,f=t.stat_desc.has_stree,c=t.stat_desc.extra_bits,d=t.stat_desc.extra_base,p=t.stat_desc.max_length,m=0;for(s=0;s<=g;s++)e.bl_count[s]=0;for(h[2*e.heap[e.heap_max]+1]=0,r=e.heap_max+1;r<_;r++)p<(s=h[2*h[2*(n=e.heap[r])+1]+1]+1)&&(s=p,m++),h[2*n+1]=s,u>=7;n>>=1)if(1&r&&0!==e.dyn_ltree[2*t])return o;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return h;for(t=32;t>>3,(s=e.static_len+3+7>>>3)<=i&&(i=s)):i=s=r+5,r+4<=i&&-1!==t?J(e,t,r,n):4===e.strategy||s===i?(P(e,2+(n?1:0),3),K(e,z,C)):(P(e,4+(n?1:0),3),function(e,t,r,n){var i;for(P(e,t-257,5),P(e,r-1,5),P(e,n-4,4),i=0;i>>8&255,e.pending_buf[e.d_buf+2*e.last_lit+1]=255&t,e.pending_buf[e.l_buf+e.last_lit]=255&r,e.last_lit++,0===t?e.dyn_ltree[2*r]++:(e.matches++,t--,e.dyn_ltree[2*(A[r]+u+1)]++,e.dyn_dtree[2*N(t)]++),e.last_lit===e.lit_bufsize-1},r._tr_align=function(e){P(e,2,3),L(e,m,z),function(e){16===e.bi_valid?(U(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):8<=e.bi_valid&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8);}(e);};},{"../utils/common":41}],53:[function(e,t,r){t.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0;};},{}],54:[function(e,t,r){(function(e){!function(r,n){if(!r.setImmediate){var i,s,t,a,o=1,h={},u=!1,l=r.document,e=Object.getPrototypeOf&&Object.getPrototypeOf(r);e=e&&e.setTimeout?e:r,i="[object process]"==={}.toString.call(r.process)?function(e){process.nextTick(function(){c(e);});}:function(){if(r.postMessage&&!r.importScripts){var e=!0,t=r.onmessage;return r.onmessage=function(){e=!1;},r.postMessage("","*"),r.onmessage=t,e}}()?(a="setImmediate$"+Math.random()+"$",r.addEventListener?r.addEventListener("message",d,!1):r.attachEvent("onmessage",d),function(e){r.postMessage(a+e,"*");}):r.MessageChannel?((t=new MessageChannel).port1.onmessage=function(e){c(e.data);},function(e){t.port2.postMessage(e);}):l&&"onreadystatechange"in l.createElement("script")?(s=l.documentElement,function(e){var t=l.createElement("script");t.onreadystatechange=function(){c(e),t.onreadystatechange=null,s.removeChild(t),t=null;},s.appendChild(t);}):function(e){setTimeout(c,0,e);},e.setImmediate=function(e){"function"!=typeof e&&(e=new Function(""+e));for(var t=new Array(arguments.length-1),r=0;r __awaiter(void 0, void 0, void 0, function* () { - const fetched = yield obsidian.requestUrl({ url }); - const bytes = fetched.arrayBuffer; - return bytes; -}); -/** - * Transforms a JSZip file into a File object. - * @param file JSZip file to transform. - * @returns File object of the JSZip file. - */ -const getFileFromJSZipFile = (file) => __awaiter(void 0, void 0, void 0, function* () { - const fileData = yield file.async('blob'); - const filename = file.name.split('/').pop(); - return new File([fileData], filename); -}); -/** - * Read a zip file and return the files inside it. - * @param bytes ArrayBuffer of the zip file. - * @param extraPath String path to filter the files inside the zip file. This can be used - * to set an extra path (like a directory inside the zip file) to filter the files. - * @returns Array of loaded files inside the zip file. - */ -const readZipFile = (bytes_1, ...args_1) => __awaiter(void 0, [bytes_1, ...args_1], void 0, function* (bytes, extraPath = '') { - const unzippedFiles = yield jszip_minExports.loadAsync(bytes); - return Promise.resolve(unzippedFiles).then((unzipped) => { - if (!Object.keys(unzipped.files).length) { - return Promise.reject('No file was found'); - } - const files = []; - // Regex for retrieving the files inside the zip file or inside the directory of a - // zip file. - const regex = new RegExp(extraPath + '(.+)\\.svg', 'g'); - Object.entries(unzippedFiles.files).forEach(([_, v]) => { - const matched = v.name.match(regex); - if (!v.dir && matched && matched.length > 0) { - files.push(v); - } - }); - return files; - }); -}); - -const PLUGIN_NAME = 'iconize'; -const TITLE_ICON_CLASS = 'iconize-title-icon'; -const INLINE_TITLE_WRAPPER_CLASS = 'iconize-inline-title-wrapper'; -/** - * The name of the attribute that is used to store the icon name in the node. - * The value of this attributes contains the prefix and the name of the icon. - */ -const ICON_ATTRIBUTE_NAME = 'data-icon'; -var config = { - PLUGIN_NAME, - TITLE_ICON_CLASS, - INLINE_TITLE_WRAPPER_CLASS, - ICON_ATTRIBUTE_NAME, -}; - -class ConsoleLogger { - constructor(projectPrefix, enabled = false) { - this.logLevels = { - log: { label: 'LOG:' }, - info: { label: 'INFO:' }, - warn: { label: 'WARN:' }, - error: { label: 'ERROR:' }, - }; - this.projectPrefix = projectPrefix; - this.enabled = enabled; - } - formatMessage(level, message, optionalParams) { - const timestamp = new Date().toISOString(); - const { label } = this.logLevels[level]; - return [ - `${this.projectPrefix}: [${timestamp}] ${label} ${message}`, - ...optionalParams, - ]; - } - log(message, ...optionalParams) { - if (this.enabled) { - console.log(...this.formatMessage('log', message, optionalParams)); - } - } - info(message, ...optionalParams) { - if (this.enabled) { - console.info(...this.formatMessage('info', message, optionalParams)); - } - } - warn(message, ...optionalParams) { - if (this.enabled) { - console.warn(...this.formatMessage('warn', message, optionalParams)); - } - } - error(message, ...optionalParams) { - if (this.enabled) { - console.error(...this.formatMessage('error', message, optionalParams)); - } - } - toggleLogging(enabled) { - this.enabled = enabled; - } -} -const logger = new ConsoleLogger(config.PLUGIN_NAME); - -const iconPacks$1 = { - faBrands: { - name: 'font-awesome-brands', - displayName: 'FontAwesome Brands', - path: 'fontawesome-free-6.5.1-web/svgs/brands/', - downloadLink: 'https://github.com/FortAwesome/Font-Awesome/releases/download/6.5.1/fontawesome-free-6.5.1-web.zip', - }, - faRegular: { - name: 'font-awesome-regular', - displayName: 'FontAwesome Regular', - path: 'fontawesome-free-6.5.1-web/svgs/regular/', - downloadLink: 'https://github.com/FortAwesome/Font-Awesome/releases/download/6.5.1/fontawesome-free-6.5.1-web.zip', - }, - faSolid: { - name: 'font-awesome-solid', - displayName: 'FontAwesome Solid', - path: 'fontawesome-free-6.5.1-web/svgs/solid/', - downloadLink: 'https://github.com/FortAwesome/Font-Awesome/releases/download/6.5.1/fontawesome-free-6.5.1-web.zip', - }, - remixIcons: { - name: 'remix-icons', - displayName: 'Remix Icons', - path: '', - downloadLink: 'https://github.com/Remix-Design/RemixIcon/releases/download/v4.2.0/RemixIcon_Svg_v4.2.0.zip', - }, - iconBrew: { - name: 'icon-brew', - displayName: 'Icon Brew', - path: '', - downloadLink: 'https://github.com/FlorianWoelki/obsidian-iconize/raw/main/iconPacks/icon-brew.zip', - }, - /** @source https://simpleicons.org/ */ - simpleIcons: { - name: 'simple-icons', - displayName: 'Simple Icons', - path: 'simple-icons-11.10.0/icons/', - downloadLink: 'https://github.com/simple-icons/simple-icons/archive/refs/tags/11.10.0.zip', - }, - lucide: { - name: 'lucide-icons', - displayName: 'Lucide', - path: '', - downloadLink: 'https://github.com/lucide-icons/lucide/releases/download/0.363.0/lucide-icons-0.363.0.zip', - }, - tablerIcons: { - name: 'tabler-icons', - displayName: 'Tabler Icons', - path: 'svg', - downloadLink: 'https://github.com/tabler/tabler-icons/releases/download/v3.1.0/tabler-icons-3.1.0.zip', - }, - /** @source https://boxicons.com/ */ - boxicons: { - name: 'boxicons', - displayName: 'Boxicons', - path: 'svg', - downloadLink: 'https://github.com/FlorianWoelki/obsidian-iconize/raw/main/iconPacks/boxicons.zip', - }, - /** @source http://nagoshiashumari.github.io/Rpg-Awesome/ */ - rpgAwesome: { - name: 'rpg-awesome', - displayName: 'RPG Awesome', - path: '', - downloadLink: 'https://github.com/FlorianWoelki/obsidian-iconize/raw/main/iconPacks/rpg-awesome.zip', - }, - /** @source https://coolicons.cool/ */ - coolicons: { - name: 'coolicons', - displayName: 'Coolicons', - path: 'cooliocns SVG', - downloadLink: 'https://github.com/krystonschwarze/coolicons/releases/download/v4.1/coolicons.v4.1.zip', - }, - /** @source https://feathericons.com/ */ - feathericons: { - name: 'feather-icons', - displayName: 'Feather Icons', - path: 'feather-4.29.1/icons/', - downloadLink: 'https://github.com/feathericons/feather/archive/refs/tags/v4.29.1.zip', - }, - /** @source https://github.com/primer/octicons */ - octicons: { - name: 'octicons', - displayName: 'Octicons', - path: 'octicons-19.8.0/icons/', - downloadLink: 'https://github.com/primer/octicons/archive/refs/tags/v19.8.0.zip', - }, -}; -/** - * Returns a possible path to the icon pack. - * @param name String of the icon pack name. - * @returns String of the path to the icon pack or undefined if the icon pack does not - * exist. - */ -const getExtraPath = (iconPackName) => { - var _a; - const path = (_a = Object.values(iconPacks$1).find((iconPack) => iconPack.name === iconPackName)) === null || _a === void 0 ? void 0 : _a.path; - return (path === null || path === void 0 ? void 0 : path.length) === 0 ? undefined : path; -}; - -let path; -const getPath = () => { - return path; -}; -const setPath = (newPath) => { - if (newPath === 'plugins/obsidian-icon-folder/icons') { - newPath = '.obsidian/plugins/obsidian-icon-folder/icons'; - new obsidian.Notice(`[${config.PLUGIN_NAME}] Due to a change in version v1.2.2, the icon pack folder changed. Please change it in the settings to not be directly in /plugins.`, 8000); - } - path = newPath; -}; -let preloadedIcons = []; -const getPreloadedIcons = () => { - return preloadedIcons; -}; -const resetPreloadedIcons = () => { - preloadedIcons = []; -}; -let iconPacks = []; -const moveIconPackDirectories = (plugin, from, to) => __awaiter(void 0, void 0, void 0, function* () { - // Tries to move all icon packs to the new folder. - for (let i = 0; i < iconPacks.length; i++) { - const iconPack = iconPacks[i]; - if (yield plugin.app.vault.adapter.exists(`${from}/${iconPack.name}`)) { - // Tries to create a new directory in the new path. - const doesDirExist = yield createDirectory(plugin, iconPack.name); - if (doesDirExist) { - new obsidian.Notice(`Directory with name ${iconPack.name} already exists.`); - continue; - } - } - new obsidian.Notice(`Moving ${iconPack.name}...`); - // Move the zip file. - if (yield plugin.app.vault.adapter.exists(`${from}/${iconPack.name}.zip`)) { - yield plugin.app.vault.adapter.copy(`${from}/${iconPack.name}.zip`, `${to}/${iconPack.name}.zip`); - } - // Move all other files inside of the iconpack directory. - const filesInDirectory = yield getFilesInDirectory(plugin, `${from}/${iconPack.name}`); - for (const file of filesInDirectory) { - const fileName = file.split('/').pop(); - yield plugin.app.vault.adapter.copy(`${from}/${iconPack.name}/${fileName}`, `${to}/${iconPack.name}/${fileName}`); - } - new obsidian.Notice(`...moved ${iconPack.name}`); - } - // Removes all the existing icon packs in the `from` directory. - for (let i = 0; i < iconPacks.length; i++) { - const iconPack = iconPacks[i]; - if (yield plugin.app.vault.adapter.exists(`${from}/${iconPack.name}`)) { - yield plugin.app.vault.adapter.rmdir(`${from}/${iconPack.name}`, true); - } - } - // Remove root directory that contains all the icon packs. - if (!to.startsWith(from)) { - yield plugin.app.vault.adapter.rmdir(`${from}`, true); - } -}); -const createCustomIconPackDirectory = (plugin, dir) => __awaiter(void 0, void 0, void 0, function* () { - yield createDirectory(plugin, dir); - const prefix = createIconPackPrefix(dir); - iconPacks.push({ name: dir, icons: [], prefix, custom: true }); -}); -const deleteIconPack = (plugin, dir) => __awaiter(void 0, void 0, void 0, function* () { - iconPacks = iconPacks.filter((iconPack) => iconPack.name !== dir); - // Check for the icon pack directory and delete it. - if (yield plugin.app.vault.adapter.exists(`${path}/${dir}`)) { - yield plugin.app.vault.adapter.rmdir(`${path}/${dir}`, true); - } - // Check for the icon pack zip file and delete it. - if (yield plugin.app.vault.adapter.exists(`${path}/${dir}.zip`)) { - yield plugin.app.vault.adapter.remove(`${path}/${dir}.zip`); - } -}); -const doesIconPackExist = (plugin, iconPackName) => { - return plugin.app.vault.adapter.exists(`${path}/${iconPackName}`); -}; -const createDirectory = (plugin, dir) => __awaiter(void 0, void 0, void 0, function* () { - const doesDirExist = yield plugin.app.vault.adapter.exists(`${path}/${dir}`); - if (!doesDirExist) { - yield plugin.app.vault.adapter.mkdir(`${path}/${dir}`); - } - return doesDirExist; -}); -const getNormalizedName = (s) => { - return s - .split(/[ -]|[ _]/g) - .map((part) => part.charAt(0).toUpperCase() + part.slice(1)) - .join(''); -}; -// export const normalizeFileName = async (plugin: Plugin, oldPath: string) => { -// const fileName = oldPath.split('/').pop(); -// const newPath = oldPath.substring(0, oldPath.indexOf(fileName)) + getNormalizedName(fileName); -// await plugin.app.vault.adapter.rename(oldPath, newPath); -// }; -const createZipFile = (plugin, filename, buffer) => __awaiter(void 0, void 0, void 0, function* () { - yield plugin.app.vault.adapter.writeBinary(`${path}/${filename}`, buffer); -}); -const createFile = (plugin, iconPackName, filename, content, absoluteFilename) => __awaiter(void 0, void 0, void 0, function* () { - const normalizedFilename = getNormalizedName(filename); - const exists = yield plugin.app.vault.adapter.exists(`${path}/${iconPackName}/${normalizedFilename}`); - if (exists) { - const folderSplit = absoluteFilename.split('/'); - if (folderSplit.length >= 2) { - const folderName = folderSplit[folderSplit.length - 2]; - const newFilename = folderName + normalizedFilename; - yield plugin.app.vault.adapter.write(`${path}/${iconPackName}/${newFilename}`, content); - logger.info(`Renamed old file ${normalizedFilename} to ${newFilename} due to duplication`); - new obsidian.Notice(`[${config.PLUGIN_NAME}] Renamed ${normalizedFilename} to ${newFilename} to avoid duplication.`, 8000); - } - else { - logger.warn(`Could not create icons with duplicated file names (file name: ${normalizedFilename})`); - new obsidian.Notice(`[${config.PLUGIN_NAME}] Could not create duplicated icon name (${normalizedFilename})`, 8000); - } - } - else { - yield plugin.app.vault.adapter.write(`${path}/${iconPackName}/${normalizedFilename}`, content); - } -}); -const createDefaultDirectory = (plugin) => __awaiter(void 0, void 0, void 0, function* () { - yield createDirectory(plugin, ''); -}); -const getAllIconPacks = () => { - return iconPacks; -}; -const getFilesInDirectory = (plugin, dir) => __awaiter(void 0, void 0, void 0, function* () { - if (!(yield plugin.app.vault.adapter.exists(dir))) { - return []; - } - return (yield plugin.app.vault.adapter.list(dir)).files; -}); -const validIconName = /^[(A-Z)|(0-9)]/; -const svgViewboxRegex = /viewBox="([^"]*)"/g; -const svgContentRegex = /(.*?)<\/svg>/g; -const generateIcon = (iconPackName, iconName, content) => { - if (content.length === 0) { - return; - } - content = content.replace(/(\r\n|\n|\r)/gm, ''); - content = content.replace(/>\s+<'); - const normalizedName = iconName.charAt(0).toUpperCase() + iconName.substring(1); - if (!validIconName.exec(normalizedName)) { - logger.info(`Skipping icon with invalid name: ${iconName}`); - return null; - } - const svgViewboxMatch = content.match(svgViewboxRegex); - let svgViewbox = ''; - if (svgViewboxMatch && svgViewboxMatch.length !== 0) { - svgViewbox = svgViewboxMatch[0]; - } - const svgContentMatch = content.match(svgContentRegex); - if (!svgContentMatch) { - logger.info(`Skipping icon with invalid svg content: ${iconName}`); - return null; - } - const svgContent = svgContentMatch.map((val) => val.replace(/<\/?svg>/g, '').replace(//g, ''))[0]; - const iconPackPrefix = createIconPackPrefix(iconPackName); - const icon = { - name: normalizedName.split('.svg')[0], - prefix: iconPackPrefix, - iconPackName, - filename: iconName, - svgContent, - svgViewbox, - svgElement: svg.extract(content), - }; - return icon; -}; -const createIconPackPrefix = (iconPackName) => { - if (iconPackName.includes('-')) { - const splitted = iconPackName.split('-'); - let result = splitted[0].charAt(0).toUpperCase(); - for (let i = 1; i < splitted.length; i++) { - result += splitted[i].charAt(0).toLowerCase(); - } - return result; - } - return (iconPackName.charAt(0).toUpperCase() + iconPackName.charAt(1).toLowerCase()); -}; -const loadUsedIcons = (plugin, icons) => __awaiter(void 0, void 0, void 0, function* () { - const iconPacks = (yield listPath(plugin)).folders.map((iconPack) => iconPack.split('/').pop()); - for (let i = 0; i < icons.length; i++) { - const entry = icons[i]; - if (!entry) { - continue; - } - yield loadIcon(plugin, iconPacks, entry); - } -}); -const listPath = (plugin, listPath) => { - return plugin.app.vault.adapter.list(listPath !== null && listPath !== void 0 ? listPath : path); -}; -const getIconPackNameByPrefix = (prefix) => { - var _a; - return (_a = iconPacks.find((iconPack) => iconPack.prefix === prefix)) === null || _a === void 0 ? void 0 : _a.name; -}; -const nextIdentifier = (iconName) => { - return iconName.substring(1).search(/[(A-Z)|(0-9)]/) + 1; -}; -const loadIcon = (plugin, iconPacks, iconName) => __awaiter(void 0, void 0, void 0, function* () { - const nextLetter = nextIdentifier(iconName); - const prefix = iconName.substring(0, nextLetter); - const name = iconName.substring(nextLetter); - const iconPack = iconPacks.find((folder) => { - const folderPrefix = createIconPackPrefix(folder); - return prefix === folderPrefix; - }); - if (!iconPack) { - // Ignore because background check automatically adds the icons and icon pack - // directories. - if (!plugin.getSettings().iconsBackgroundCheckEnabled) { - new obsidian.Notice(`Seems like you do not have an icon pack installed. (${iconName})`, 5000); - } - return; - } - const fullPath = path + '/' + iconPack + '/' + name + '.svg'; - if (!(yield plugin.app.vault.adapter.exists(fullPath))) { - logger.info(`Icon with name '${name}' was not found (full path: ${fullPath})`); - return; - } - const content = yield plugin.app.vault.adapter.read(fullPath); - const icon = generateIcon(iconPack, name, content); - preloadedIcons.push(icon); -}); -const initIconPacks = (plugin) => __awaiter(void 0, void 0, void 0, function* () { - // Remove the beginning slash because paths which start with `/` are the same as without - // a slash. - if (path.startsWith('/')) { - path = path.slice(1); - } - const loadedIconPacks = yield plugin.app.vault.adapter.list(path); - // Extract all zip files which will be downloaded icon packs. - const zipFiles = {}; - for (let i = 0; i < loadedIconPacks.files.length; i++) { - const fileName = loadedIconPacks.files[i]; - if (fileName.endsWith('.zip')) { - const arrayBuffer = yield plugin.app.vault.adapter.readBinary(fileName); - const files = yield readZipFile(arrayBuffer); - const iconPackName = fileName.split('/').pop().split('.zip')[0]; - zipFiles[iconPackName] = files; - } - } - // Check for custom-made icon packs. - for (let i = 0; i < loadedIconPacks.folders.length; i++) { - const folderName = loadedIconPacks.folders[i].split('/').pop(); - // Continue if the icon pack does have a zip file. - if (zipFiles[folderName]) { - continue; - } - const files = yield getFilesInDirectory(plugin, `${path}/${folderName}`); - const loadedIcons = []; - // Convert files into loaded svgs. - for (let j = 0; j < files.length; j++) { - const iconNameRegex = files[j].match(new RegExp(path + '/' + folderName + '/(.*)')); - const iconName = getNormalizedName(iconNameRegex[1]); - const iconContent = yield plugin.app.vault.adapter.read(files[j]); - const icon = generateIcon(folderName, iconName, iconContent); - if (icon) { - loadedIcons.push(icon); - } - } - const prefix = createIconPackPrefix(folderName); - iconPacks.push({ - name: folderName, - icons: loadedIcons, - prefix, - custom: true, - }); - logger.info(`Loaded icon pack '${folderName}' (amount of icons: ${loadedIcons.length})`); - } - // Extract all files from the zip files. - for (const zipFile in zipFiles) { - const files = zipFiles[zipFile]; - const loadedIcons = yield getLoadedIconsFromZipFile(zipFile, files); - const prefix = createIconPackPrefix(zipFile); - iconPacks.push({ - name: zipFile, - icons: loadedIcons, - prefix, - custom: false, - }); - logger.info(`Loaded icon pack '${zipFile}' (amount of icons: ${loadedIcons.length})`); - } -}); -const getLoadedIconsFromZipFile = (iconPackName, files) => __awaiter(void 0, void 0, void 0, function* () { - const loadedIcons = []; - const extraPath = getExtraPath(iconPackName); - for (let j = 0; j < files.length; j++) { - // Checks if the icon pack has an extra path. Also ignores files which do not start - // with the extra path. - if (extraPath && !files[j].name.startsWith(extraPath)) { - continue; - } - const file = yield getFileFromJSZipFile(files[j]); - const iconContent = yield file.text(); - const iconName = getNormalizedName(file.name); - const icon = generateIcon(iconPackName, iconName, iconContent); - if (icon) { - loadedIcons.push(icon); - } - } - return loadedIcons; -}); -const addIconToIconPack = (iconPackName, iconName, iconContent) => { - // Normalize the icon name to remove `-` or `_` in the name. - iconName = getNormalizedName(iconName); - const icon = generateIcon(iconPackName, iconName, iconContent); - if (!icon) { - logger.warn(`Icon could not be generated (icon: ${iconName}, content: ${iconContent})`); - return undefined; - } - const iconPack = iconPacks.find((iconPack) => iconPack.name === iconPackName); - if (!iconPack) { - logger.warn(`Iconpack with name '${iconPackName}' was not found`); - return undefined; - } - iconPack.icons.push(icon); - return icon; -}; -const removeIconFromIconPackDirectory = (plugin, iconPackName, iconName) => { - const iconPack = iconPacks.find((iconPack) => iconPack.name === iconPackName); - // Checks if icon pack is custom-made. - if (!iconPack.custom) { - return plugin.app.vault.adapter.rmdir(`${path}/${iconPackName}/${iconName}.svg`, true); - } -}; -const extractIconToIconPack = (plugin, icon, iconContent) => __awaiter(void 0, void 0, void 0, function* () { - const doesIconPackDirExist = yield plugin.app.vault.adapter.exists(`${path}/${icon.iconPackName}`); - if (!doesIconPackDirExist) { - yield plugin.app.vault.adapter.mkdir(`${path}/${icon.iconPackName}`); - } - const doesIconFileExists = yield plugin.app.vault.adapter.exists(`${path}/${icon.iconPackName}/${icon.name}.svg`); - if (!doesIconFileExists) { - yield createFile(plugin, icon.iconPackName, `${icon.name}.svg`, iconContent); - } -}); -const getAllLoadedIconNames = () => { - return iconPacks.reduce((total, iconPack) => { - total.push(...iconPack.icons); - return total; - }, []); -}; -const registerIconPack = (name, arrayBuffer) => __awaiter(void 0, void 0, void 0, function* () { - const files = yield readZipFile(arrayBuffer); - const loadedIcons = yield getLoadedIconsFromZipFile(name, files); - const prefix = createIconPackPrefix(name); - iconPacks.push({ name, icons: loadedIcons, prefix, custom: false }); - logger.info(`Loaded icon pack ${name} (amount of icons: ${loadedIcons.length})`); -}); -const doesIconExists = (iconName) => { - const icons = getAllLoadedIconNames(); - return (icons.find((icon) => icon.name === iconName || icon.prefix + icon.name === iconName) !== undefined); -}; -const getIconFromIconPack = (iconPackName, iconPrefix, iconName) => { - const foundIcon = preloadedIcons.find((icon) => icon.prefix.toLowerCase() === iconPrefix.toLowerCase() && - icon.name.toLowerCase() === iconName.toLowerCase()); - if (foundIcon) { - return foundIcon; - } - const iconPack = iconPacks.find((iconPack) => iconPack.name === iconPackName); - if (!iconPack) { - return undefined; - } - return iconPack.icons.find((icon) => getNormalizedName(icon.name) === iconName); -}; -const getSvgFromLoadedIcon = (iconPrefix, iconName) => { - let icon = ''; - let foundIcon = preloadedIcons.find((icon) => icon.prefix.toLowerCase() === iconPrefix.toLowerCase() && - icon.name.toLowerCase() === iconName.toLowerCase()); - if (!foundIcon) { - iconPacks.forEach((iconPack) => { - const icon = iconPack.icons.find((icon) => { - return (icon.prefix.toLowerCase() === iconPrefix.toLowerCase() && - getNormalizedName(icon.name).toLowerCase() === iconName.toLowerCase()); - }); - if (icon) { - foundIcon = icon; - } - }); - } - if (foundIcon) { - icon = foundIcon.svgElement; - } - return icon; -}; - -/*! Copyright Twitter Inc. and other contributors. Licensed under MIT */ -var twemoji=function(){var twemoji={base:"https://cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/",ext:".png",size:"72x72",className:"emoji",convert:{fromCodePoint:fromCodePoint,toCodePoint:toCodePoint},onerror:function onerror(){if(this.parentNode){this.parentNode.replaceChild(createText(this.alt,false),this);}},parse:parse,replace:replace,test:test},escaper={"&":"&","<":"<",">":">","'":"'",'"':"""},re=/(?:\ud83d\udc68\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83e\uddd1\ud83c[\udffc-\udfff]|\ud83e\uddd1\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83e\uddd1\ud83c[\udffb\udffd-\udfff]|\ud83e\uddd1\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83e\uddd1\ud83c[\udffb\udffc\udffe\udfff]|\ud83e\uddd1\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83e\uddd1\ud83c[\udffb-\udffd\udfff]|\ud83e\uddd1\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83e\uddd1\ud83c[\udffb-\udffe]|\ud83d\udc68\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffc-\udfff]|\ud83d\udc68\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffd-\udfff]|\ud83d\udc68\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffc\udffe\udfff]|\ud83d\udc68\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffd\udfff]|\ud83d\udc68\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffe]|\ud83d\udc69\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffc-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffc-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffd-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb\udffd-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffc\udffe\udfff]|\ud83d\udc69\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb\udffc\udffe\udfff]|\ud83d\udc69\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffd\udfff]|\ud83d\udc69\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb-\udffd\udfff]|\ud83d\udc69\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffe]|\ud83d\udc69\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb-\udffe]|\ud83e\uddd1\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83e\uddd1\ud83c[\udffc-\udfff]|\ud83e\uddd1\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83e\uddd1\ud83c[\udffb\udffd-\udfff]|\ud83e\uddd1\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83e\uddd1\ud83c[\udffb\udffc\udffe\udfff]|\ud83e\uddd1\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83e\uddd1\ud83c[\udffb-\udffd\udfff]|\ud83e\uddd1\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83e\uddd1\ud83c[\udffb-\udffe]|\ud83e\uddd1\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d[\udc68\udc69]|\ud83e\udef1\ud83c\udffb\u200d\ud83e\udef2\ud83c[\udffc-\udfff]|\ud83e\udef1\ud83c\udffc\u200d\ud83e\udef2\ud83c[\udffb\udffd-\udfff]|\ud83e\udef1\ud83c\udffd\u200d\ud83e\udef2\ud83c[\udffb\udffc\udffe\udfff]|\ud83e\udef1\ud83c\udffe\u200d\ud83e\udef2\ud83c[\udffb-\udffd\udfff]|\ud83e\udef1\ud83c\udfff\u200d\ud83e\udef2\ud83c[\udffb-\udffe]|\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc68|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d[\udc68\udc69]|\ud83e\uddd1\u200d\ud83e\udd1d\u200d\ud83e\uddd1|\ud83d\udc6b\ud83c[\udffb-\udfff]|\ud83d\udc6c\ud83c[\udffb-\udfff]|\ud83d\udc6d\ud83c[\udffb-\udfff]|\ud83d\udc8f\ud83c[\udffb-\udfff]|\ud83d\udc91\ud83c[\udffb-\udfff]|\ud83e\udd1d\ud83c[\udffb-\udfff]|\ud83d[\udc6b-\udc6d\udc8f\udc91]|\ud83e\udd1d)|(?:\ud83d[\udc68\udc69]|\ud83e\uddd1)(?:\ud83c[\udffb-\udfff])?\u200d(?:\u2695\ufe0f|\u2696\ufe0f|\u2708\ufe0f|\ud83c[\udf3e\udf73\udf7c\udf84\udf93\udfa4\udfa8\udfeb\udfed]|\ud83d[\udcbb\udcbc\udd27\udd2c\ude80\ude92]|\ud83e[\uddaf-\uddb3\uddbc\uddbd])(?:\u200d\u27a1\ufe0f)?|(?:\ud83c[\udfcb\udfcc]|\ud83d[\udd74\udd75]|\u26f9)((?:\ud83c[\udffb-\udfff]|\ufe0f)\u200d[\u2640\u2642]\ufe0f(?:\u200d\u27a1\ufe0f)?)|(?:\ud83c[\udfc3\udfc4\udfca]|\ud83d[\udc6e\udc70\udc71\udc73\udc77\udc81\udc82\udc86\udc87\ude45-\ude47\ude4b\ude4d\ude4e\udea3\udeb4-\udeb6]|\ud83e[\udd26\udd35\udd37-\udd39\udd3d\udd3e\uddb8\uddb9\uddcd-\uddcf\uddd4\uddd6-\udddd])(?:\ud83c[\udffb-\udfff])?\u200d[\u2640\u2642]\ufe0f(?:\u200d\u27a1\ufe0f)?|(?:\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83e\uddd1\u200d\ud83e\uddd1\u200d\ud83e\uddd2\u200d\ud83e\uddd2|\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83e\uddd1\u200d\ud83e\uddd1\u200d\ud83e\uddd2|\ud83e\uddd1\u200d\ud83e\uddd2\u200d\ud83e\uddd2|\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f|\ud83c\udff3\ufe0f\u200d\ud83c\udf08|\ud83d\ude36\u200d\ud83c\udf2b\ufe0f|\u26d3\ufe0f\u200d\ud83d\udca5|\u2764\ufe0f\u200d\ud83d\udd25|\u2764\ufe0f\u200d\ud83e\ude79|\ud83c\udf44\u200d\ud83d\udfeb|\ud83c\udf4b\u200d\ud83d\udfe9|\ud83c\udff4\u200d\u2620\ufe0f|\ud83d\udc15\u200d\ud83e\uddba|\ud83d\udc26\u200d\ud83d\udd25|\ud83d\udc3b\u200d\u2744\ufe0f|\ud83d\udc41\u200d\ud83d\udde8|\ud83d\udc68\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83d\udc6f\u200d\u2640\ufe0f|\ud83d\udc6f\u200d\u2642\ufe0f|\ud83d\ude2e\u200d\ud83d\udca8|\ud83d\ude35\u200d\ud83d\udcab|\ud83d\ude42\u200d\u2194\ufe0f|\ud83d\ude42\u200d\u2195\ufe0f|\ud83e\udd3c\u200d\u2640\ufe0f|\ud83e\udd3c\u200d\u2642\ufe0f|\ud83e\uddd1\u200d\ud83e\uddd2|\ud83e\uddde\u200d\u2640\ufe0f|\ud83e\uddde\u200d\u2642\ufe0f|\ud83e\udddf\u200d\u2640\ufe0f|\ud83e\udddf\u200d\u2642\ufe0f|\ud83d\udc08\u200d\u2b1b|\ud83d\udc26\u200d\u2b1b)|[#*0-9]\ufe0f?\u20e3|(?:[©®\u2122\u265f]\ufe0f)|(?:\ud83c[\udc04\udd70\udd71\udd7e\udd7f\ude02\ude1a\ude2f\ude37\udf21\udf24-\udf2c\udf36\udf7d\udf96\udf97\udf99-\udf9b\udf9e\udf9f\udfcd\udfce\udfd4-\udfdf\udff3\udff5\udff7]|\ud83d[\udc3f\udc41\udcfd\udd49\udd4a\udd6f\udd70\udd73\udd76-\udd79\udd87\udd8a-\udd8d\udda5\udda8\uddb1\uddb2\uddbc\uddc2-\uddc4\uddd1-\uddd3\udddc-\uddde\udde1\udde3\udde8\uddef\uddf3\uddfa\udecb\udecd-\udecf\udee0-\udee5\udee9\udef0\udef3]|[\u203c\u2049\u2139\u2194-\u2199\u21a9\u21aa\u231a\u231b\u2328\u23cf\u23ed-\u23ef\u23f1\u23f2\u23f8-\u23fa\u24c2\u25aa\u25ab\u25b6\u25c0\u25fb-\u25fe\u2600-\u2604\u260e\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262a\u262e\u262f\u2638-\u263a\u2640\u2642\u2648-\u2653\u2660\u2663\u2665\u2666\u2668\u267b\u267f\u2692-\u2697\u2699\u269b\u269c\u26a0\u26a1\u26a7\u26aa\u26ab\u26b0\u26b1\u26bd\u26be\u26c4\u26c5\u26c8\u26cf\u26d1\u26d3\u26d4\u26e9\u26ea\u26f0-\u26f5\u26f8\u26fa\u26fd\u2702\u2708\u2709\u270f\u2712\u2714\u2716\u271d\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u2764\u27a1\u2934\u2935\u2b05-\u2b07\u2b1b\u2b1c\u2b50\u2b55\u3030\u303d\u3297\u3299])(?:\ufe0f|(?!\ufe0e))|(?:(?:\ud83c[\udfcb\udfcc]|\ud83d[\udd74\udd75\udd90]|\ud83e\udef0|[\u261d\u26f7\u26f9\u270c\u270d])(?:\ufe0f|(?!\ufe0e))|(?:\ud83c\udfc3|\ud83d\udeb6|\ud83e\uddce)(?:\ud83c[\udffb-\udfff])?(?:\u200d\u27a1\ufe0f)?|(?:\ud83c[\udf85\udfc2\udfc4\udfc7\udfca]|\ud83d[\udc42\udc43\udc46-\udc50\udc66-\udc69\udc6e\udc70-\udc78\udc7c\udc81-\udc83\udc85-\udc87\udcaa\udd7a\udd95\udd96\ude45-\ude47\ude4b-\ude4f\udea3\udeb4\udeb5\udec0\udecc]|\ud83e[\udd0c\udd0f\udd18-\udd1c\udd1e\udd1f\udd26\udd30-\udd39\udd3d\udd3e\udd77\uddb5\uddb6\uddb8\uddb9\uddbb\uddcd\uddcf\uddd1-\udddd\udec3-\udec5\udef1-\udef8]|[\u270a\u270b]))(?:\ud83c[\udffb-\udfff])?|(?:\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f|\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc73\udb40\udc63\udb40\udc74\udb40\udc7f|\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc77\udb40\udc6c\udb40\udc73\udb40\udc7f|\ud83c\udde6\ud83c[\udde8-\uddec\uddee\uddf1\uddf2\uddf4\uddf6-\uddfa\uddfc\uddfd\uddff]|\ud83c\udde7\ud83c[\udde6\udde7\udde9-\uddef\uddf1-\uddf4\uddf6-\uddf9\uddfb\uddfc\uddfe\uddff]|\ud83c\udde8\ud83c[\udde6\udde8\udde9\uddeb-\uddee\uddf0-\uddf5\uddf7\uddfa-\uddff]|\ud83c\udde9\ud83c[\uddea\uddec\uddef\uddf0\uddf2\uddf4\uddff]|\ud83c\uddea\ud83c[\udde6\udde8\uddea\uddec\udded\uddf7-\uddfa]|\ud83c\uddeb\ud83c[\uddee-\uddf0\uddf2\uddf4\uddf7]|\ud83c\uddec\ud83c[\udde6\udde7\udde9-\uddee\uddf1-\uddf3\uddf5-\uddfa\uddfc\uddfe]|\ud83c\udded\ud83c[\uddf0\uddf2\uddf3\uddf7\uddf9\uddfa]|\ud83c\uddee\ud83c[\udde8-\uddea\uddf1-\uddf4\uddf6-\uddf9]|\ud83c\uddef\ud83c[\uddea\uddf2\uddf4\uddf5]|\ud83c\uddf0\ud83c[\uddea\uddec-\uddee\uddf2\uddf3\uddf5\uddf7\uddfc\uddfe\uddff]|\ud83c\uddf1\ud83c[\udde6-\udde8\uddee\uddf0\uddf7-\uddfb\uddfe]|\ud83c\uddf2\ud83c[\udde6\udde8-\udded\uddf0-\uddff]|\ud83c\uddf3\ud83c[\udde6\udde8\uddea-\uddec\uddee\uddf1\uddf4\uddf5\uddf7\uddfa\uddff]|\ud83c\uddf4\ud83c\uddf2|\ud83c\uddf5\ud83c[\udde6\uddea-\udded\uddf0-\uddf3\uddf7-\uddf9\uddfc\uddfe]|\ud83c\uddf6\ud83c\udde6|\ud83c\uddf7\ud83c[\uddea\uddf4\uddf8\uddfa\uddfc]|\ud83c\uddf8\ud83c[\udde6-\uddea\uddec-\uddf4\uddf7-\uddf9\uddfb\uddfd-\uddff]|\ud83c\uddf9\ud83c[\udde6\udde8\udde9\uddeb-\udded\uddef-\uddf4\uddf7\uddf9\uddfb\uddfc\uddff]|\ud83c\uddfa\ud83c[\udde6\uddec\uddf2\uddf3\uddf8\uddfe\uddff]|\ud83c\uddfb\ud83c[\udde6\udde8\uddea\uddec\uddee\uddf3\uddfa]|\ud83c\uddfc\ud83c[\uddeb\uddf8]|\ud83c\uddfd\ud83c\uddf0|\ud83c\uddfe\ud83c[\uddea\uddf9]|\ud83c\uddff\ud83c[\udde6\uddf2\uddfc]|\ud83c[\udccf\udd8e\udd91-\udd9a\udde6-\uddff\ude01\ude32-\ude36\ude38-\ude3a\ude50\ude51\udf00-\udf20\udf2d-\udf35\udf37-\udf7c\udf7e-\udf84\udf86-\udf93\udfa0-\udfc1\udfc5\udfc6\udfc8\udfc9\udfcf-\udfd3\udfe0-\udff0\udff4\udff8-\udfff]|\ud83d[\udc00-\udc3e\udc40\udc44\udc45\udc51-\udc65\udc6a\udc6f\udc79-\udc7b\udc7d-\udc80\udc84\udc88-\udc8e\udc90\udc92-\udca9\udcab-\udcfc\udcff-\udd3d\udd4b-\udd4e\udd50-\udd67\udda4\uddfb-\ude44\ude48-\ude4a\ude80-\udea2\udea4-\udeb3\udeb7-\udebf\udec1-\udec5\uded0-\uded2\uded5-\uded7\udedc-\udedf\udeeb\udeec\udef4-\udefc\udfe0-\udfeb\udff0]|\ud83e[\udd0d\udd0e\udd10-\udd17\udd20-\udd25\udd27-\udd2f\udd3a\udd3c\udd3f-\udd45\udd47-\udd76\udd78-\uddb4\uddb7\uddba\uddbc-\uddcc\uddd0\uddde-\uddff\ude70-\ude7c\ude80-\ude88\ude90-\udebd\udebf-\udec2\udece-\udedb\udee0-\udee8]|[\u23e9-\u23ec\u23f0\u23f3\u267e\u26ce\u2705\u2728\u274c\u274e\u2753-\u2755\u2795-\u2797\u27b0\u27bf\ue50a])|\ufe0f/g,UFE0Fg=/\uFE0F/g,U200D=String.fromCharCode(8205),rescaper=/[&<>'"]/g,shouldntBeParsed=/^(?:iframe|noframes|noscript|script|select|style|textarea)$/,fromCharCode=String.fromCharCode;return twemoji;function createText(text,clean){return document.createTextNode(clean?text.replace(UFE0Fg,""):text)}function escapeHTML(s){return s.replace(rescaper,replacer)}function defaultImageSrcGenerator(icon,options){return "".concat(options.base,options.size,"/",icon,options.ext)}function grabAllTextNodes(node,allText){var childNodes=node.childNodes,length=childNodes.length,subnode,nodeType;while(length--){subnode=childNodes[length];nodeType=subnode.nodeType;if(nodeType===3){allText.push(subnode);}else if(nodeType===1&&!("ownerSVGElement"in subnode)&&!shouldntBeParsed.test(subnode.nodeName.toLowerCase())){grabAllTextNodes(subnode,allText);}}return allText}function grabTheRightIcon(rawText){return toCodePoint(rawText.indexOf(U200D)<0?rawText.replace(UFE0Fg,""):rawText)}function parseNode(node,options){var allText=grabAllTextNodes(node,[]),length=allText.length,attrib,attrname,modified,fragment,subnode,text,match,i,index,img,rawText,iconId,src;while(length--){modified=false;fragment=document.createDocumentFragment();subnode=allText[length];text=subnode.nodeValue;i=0;while(match=re.exec(text)){index=match.index;if(index!==i){fragment.appendChild(createText(text.slice(i,index),true));}rawText=match[0];iconId=grabTheRightIcon(rawText);i=index+rawText.length;src=options.callback(iconId,options);if(iconId&&src){img=new Image;img.onerror=options.onerror;img.setAttribute("draggable","false");attrib=options.attributes(rawText,iconId);for(attrname in attrib){if(attrib.hasOwnProperty(attrname)&&attrname.indexOf("on")!==0&&!img.hasAttribute(attrname)){img.setAttribute(attrname,attrib[attrname]);}}img.className=options.className;img.alt=rawText;img.src=src;modified=true;fragment.appendChild(img);}if(!img)fragment.appendChild(createText(rawText,false));img=null;}if(modified){if(i");}return ret})}function replacer(m){return escaper[m]}function returnNull(){return null}function toSizeSquaredAsset(value){return typeof value==="number"?value+"x"+value:value}function fromCodePoint(codepoint){var code=typeof codepoint==="string"?parseInt(codepoint,16):codepoint;if(code<65536){return fromCharCode(code)}code-=65536;return fromCharCode(55296+(code>>10),56320+(code&1023))}function parse(what,how){if(!how||typeof how==="function"){how={callback:how};}return (typeof what==="string"?parseString:parseNode)(what,{callback:how.callback||defaultImageSrcGenerator,attributes:typeof how.attributes==="function"?how.attributes:returnNull,base:typeof how.base==="string"?how.base:twemoji.base,ext:how.ext||twemoji.ext,size:how.folder||toSizeSquaredAsset(how.size||twemoji.size),className:how.className||twemoji.className,onerror:how.onerror||twemoji.onerror})}function replace(text,callback){return String(text).replace(re,callback)}function test(text){re.lastIndex=0;var result=re.test(text);re.lastIndex=0;return result}function toCodePoint(unicodeSurrogates,sep){var r=[],c=0,p=0,i=0;while(i { - return new RegExp(/[#*0-9]\uFE0F?\u20E3|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26AA\u26B0\u26B1\u26BD\u26BE\u26C4\u26C8\u26CF\u26D1\u26E9\u26F0-\u26F5\u26F7\u26F8\u26FA\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B55\u3030\u303D\u3297\u3299]\uFE0F?|[\u261D\u270C\u270D](?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?|[\u270A\u270B](?:\uD83C[\uDFFB-\uDFFF])?|[\u23E9-\u23EC\u23F0\u23F3\u25FD\u2693\u26A1\u26AB\u26C5\u26CE\u26D4\u26EA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2795-\u2797\u27B0\u27BF\u2B50]|\u26D3\uFE0F?(?:\u200D\uD83D\uDCA5)?|\u26F9(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|\u2764\uFE0F?(?:\u200D(?:\uD83D\uDD25|\uD83E\uDE79))?|\uD83C(?:[\uDC04\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]\uFE0F?|[\uDF85\uDFC2\uDFC7](?:\uD83C[\uDFFB-\uDFFF])?|[\uDFC4\uDFCA](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDFCB\uDFCC](?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF43\uDF45-\uDF4A\uDF4C-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uDDE6\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF]|\uDDE7\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF]|\uDDE8\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF]|\uDDE9\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF]|\uDDEA\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA]|\uDDEB\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7]|\uDDEC\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE]|\uDDED\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA]|\uDDEE\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9]|\uDDEF\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5]|\uDDF0\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF]|\uDDF1\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE]|\uDDF2\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF]|\uDDF3\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF]|\uDDF4\uD83C\uDDF2|\uDDF5\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE]|\uDDF6\uD83C\uDDE6|\uDDF7\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC]|\uDDF8\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF]|\uDDF9\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF]|\uDDFA\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF]|\uDDFB\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA]|\uDDFC\uD83C[\uDDEB\uDDF8]|\uDDFD\uD83C\uDDF0|\uDDFE\uD83C[\uDDEA\uDDF9]|\uDDFF\uD83C[\uDDE6\uDDF2\uDDFC]|\uDF44(?:\u200D\uD83D\uDFEB)?|\uDF4B(?:\u200D\uD83D\uDFE9)?|\uDFC3(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?|\uDFF3\uFE0F?(?:\u200D(?:\u26A7\uFE0F?|\uD83C\uDF08))?|\uDFF4(?:\u200D\u2620\uFE0F?|\uDB40\uDC67\uDB40\uDC62\uDB40(?:\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDC73\uDB40\uDC63\uDB40\uDC74|\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F)?)|\uD83D(?:[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3]\uFE0F?|[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC](?:\uD83C[\uDFFB-\uDFFF])?|[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4\uDEB5](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD74\uDD90](?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?|[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC25\uDC27-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE41\uDE43\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEDC-\uDEDF\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB\uDFF0]|\uDC08(?:\u200D\u2B1B)?|\uDC15(?:\u200D\uD83E\uDDBA)?|\uDC26(?:\u200D(?:\u2B1B|\uD83D\uDD25))?|\uDC3B(?:\u200D\u2744\uFE0F?)?|\uDC41\uFE0F?(?:\u200D\uD83D\uDDE8\uFE0F?)?|\uDC68(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDC68\uDC69]\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFE])))?))?|\uDC69(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?[\uDC68\uDC69]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?|\uDC69\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?))|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFE])))?))?|\uDC6F(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDD75(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDE2E(?:\u200D\uD83D\uDCA8)?|\uDE35(?:\u200D\uD83D\uDCAB)?|\uDE36(?:\u200D\uD83C\uDF2B\uFE0F?)?|\uDE42(?:\u200D[\u2194\u2195]\uFE0F?)?|\uDEB6(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?)|\uD83E(?:[\uDD0C\uDD0F\uDD18-\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5\uDEC3-\uDEC5\uDEF0\uDEF2-\uDEF8](?:\uD83C[\uDFFB-\uDFFF])?|[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD\uDDCF\uDDD4\uDDD6-\uDDDD](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDDDE\uDDDF](?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD0D\uDD0E\uDD10-\uDD17\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCC\uDDD0\uDDE0-\uDDFF\uDE70-\uDE7C\uDE80-\uDE88\uDE90-\uDEBD\uDEBF-\uDEC2\uDECE-\uDEDB\uDEE0-\uDEE8]|\uDD3C(?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF])?|\uDDCE(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?|\uDDD1(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1|\uDDD1\u200D\uD83E\uDDD2(?:\u200D\uD83E\uDDD2)?|\uDDD2(?:\u200D\uD83E\uDDD2)?))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?))?|\uDEF1(?:\uD83C(?:\uDFFB(?:\u200D\uD83E\uDEF2\uD83C[\uDFFC-\uDFFF])?|\uDFFC(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFD-\uDFFF])?|\uDFFD(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])?|\uDFFE(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFD\uDFFF])?|\uDFFF(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFE])?))?)/, 'g'); -}; -const shortNames = { - '😀': 'grinning face', - '😃': 'grinning face with big eyes', - '😄': 'grinning face with smiling eyes', - '😁': 'beaming face with smiling eyes', - '😆': 'grinning squinting face', - '😅': 'grinning face with sweat', - '🤣': 'rolling on the floor laughing', - '😂': 'face with tears of joy', - '🙂': 'slightly smiling face', - '🙃': 'upside-down face', - '🫠': '⊛ melting face', - '😉': 'winking face', - '😊': 'smiling face with smiling eyes', - '😇': 'smiling face with halo', - '🥰': 'smiling face with hearts', - '😍': 'smiling face with heart-eyes', - '🤩': 'star-struck', - '😘': 'face blowing a kiss', - '😗': 'kissing face', - '☺': 'smiling face', - '😚': 'kissing face with closed eyes', - '😙': 'kissing face with smiling eyes', - '🥲': 'smiling face with tear', - '😋': 'face savoring food', - '😛': 'face with tongue', - '😜': 'winking face with tongue', - '🤪': 'zany face', - '😝': 'squinting face with tongue', - '🤑': 'money-mouth face', - '🤗': 'smiling face with open hands', - '🤭': 'face with hand over mouth', - '🫢': '⊛ face with open eyes and hand over mouth', - '🫣': '⊛ face with peeking eye', - '🤫': 'shushing face', - '🤔': 'thinking face', - '🫡': '⊛ saluting face', - '🤐': 'zipper-mouth face', - '🤨': 'face with raised eyebrow', - '😐': 'neutral face', - '😑': 'expressionless face', - '😶': 'face without mouth', - '🫥': '⊛ dotted line face', - '😶‍🌫️': 'face in clouds', - '😏': 'smirking face', - '😒': 'unamused face', - '🙄': 'face with rolling eyes', - '😬': 'grimacing face', - '😮‍💨': 'face exhaling', - '🤥': 'lying face', - '😌': 'relieved face', - '😔': 'pensive face', - '😪': 'sleepy face', - '🤤': 'drooling face', - '😴': 'sleeping face', - '😷': 'face with medical mask', - '🤒': 'face with thermometer', - '🤕': 'face with head-bandage', - '🤢': 'nauseated face', - '🤮': 'face vomiting', - '🤧': 'sneezing face', - '🥵': 'hot face', - '🥶': 'cold face', - '🥴': 'woozy face', - '😵': 'face with crossed-out eyes', - '😵‍💫': 'face with spiral eyes', - '🤯': 'exploding head', - '🤠': 'cowboy hat face', - '🥳': 'partying face', - '🥸': 'disguised face', - '😎': 'smiling face with sunglasses', - '🤓': 'nerd face', - '🧐': 'face with monocle', - '😕': 'confused face', - '🫤': '⊛ face with diagonal mouth', - '😟': 'worried face', - '🙁': 'slightly frowning face', - '☹': 'frowning face', - '😮': 'face with open mouth', - '😯': 'hushed face', - '😲': 'astonished face', - '😳': 'flushed face', - '🥺': 'pleading face', - '🥹': '⊛ face holding back tears', - '😦': 'frowning face with open mouth', - '😧': 'anguished face', - '😨': 'fearful face', - '😰': 'anxious face with sweat', - '😥': 'sad but relieved face', - '😢': 'crying face', - '😭': 'loudly crying face', - '😱': 'face screaming in fear', - '😖': 'confounded face', - '😣': 'persevering face', - '😞': 'disappointed face', - '😓': 'downcast face with sweat', - '😩': 'weary face', - '😫': 'tired face', - '🥱': 'yawning face', - '😤': 'face with steam from nose', - '😡': 'pouting face', - '😠': 'angry face', - '🤬': 'face with symbols on mouth', - '😈': 'smiling face with horns', - '👿': 'angry face with horns', - '💀': 'skull', - '☠': 'skull and crossbones', - '💩': 'pile of poo', - '🤡': 'clown face', - '👹': 'ogre', - '👺': 'goblin', - '👻': 'ghost', - '👽': 'alien', - '👾': 'alien monster', - '🤖': 'robot', - '😺': 'grinning cat', - '😸': 'grinning cat with smiling eyes', - '😹': 'cat with tears of joy', - '😻': 'smiling cat with heart-eyes', - '😼': 'cat with wry smile', - '😽': 'kissing cat', - '🙀': 'weary cat', - '😿': 'crying cat', - '😾': 'pouting cat', - '🙈': 'see-no-evil monkey', - '🙉': 'hear-no-evil monkey', - '🙊': 'speak-no-evil monkey', - '💋': 'kiss mark', - '💌': 'love letter', - '💘': 'heart with arrow', - '💝': 'heart with ribbon', - '💖': 'sparkling heart', - '💗': 'growing heart', - '💓': 'beating heart', - '💞': 'revolving hearts', - '💕': 'two hearts', - '💟': 'heart decoration', - '❣': 'heart exclamation', - '💔': 'broken heart', - '❤️‍🔥': 'heart on fire', - '❤️‍🩹': 'mending heart', - '❤': 'red heart', - '🧡': 'orange heart', - '💛': 'yellow heart', - '💚': 'green heart', - '💙': 'blue heart', - '💜': 'purple heart', - '🤎': 'brown heart', - '🖤': 'black heart', - '🤍': 'white heart', - '💯': 'hundred points', - '💢': 'anger symbol', - '💥': 'collision', - '💫': 'dizzy', - '💦': 'sweat droplets', - '💨': 'dashing away', - '🕳': 'hole', - '💣': 'bomb', - '💬': 'speech balloon', - '👁️‍🗨️': 'eye in speech bubble', - '🗨': 'left speech bubble', - '🗯': 'right anger bubble', - '💭': 'thought balloon', - '💤': 'zzz', - '👋': 'waving hand', - '🤚': 'raised back of hand', - '🖐': 'hand with fingers splayed', - '✋': 'raised hand', - '🖖': 'vulcan salute', - '🫱': '⊛ rightwards hand', - '🫲': '⊛ leftwards hand', - '🫳': '⊛ palm down hand', - '🫴': '⊛ palm up hand', - '👌': 'OK hand', - '🤌': 'pinched fingers', - '🤏': 'pinching hand', - '✌': 'victory hand', - '🤞': 'crossed fingers', - '🫰': '⊛ hand with index finger and thumb crossed', - '🤟': 'love-you gesture', - '🤘': 'sign of the horns', - '🤙': 'call me hand', - '👈': 'backhand index pointing left', - '👉': 'backhand index pointing right', - '👆': 'backhand index pointing up', - '🖕': 'middle finger', - '👇': 'backhand index pointing down', - '☝': 'index pointing up', - '🫵': '⊛ index pointing at the viewer', - '👍': 'thumbs up', - '👎': 'thumbs down', - '✊': 'raised fist', - '👊': 'oncoming fist', - '🤛': 'left-facing fist', - '🤜': 'right-facing fist', - '👏': 'clapping hands', - '🙌': 'raising hands', - '🫶': '⊛ heart hands', - '👐': 'open hands', - '🤲': 'palms up together', - '🤝': 'handshake', - '🙏': 'folded hands', - '✍': 'writing hand', - '💅': 'nail polish', - '🤳': 'selfie', - '💪': 'flexed biceps', - '🦾': 'mechanical arm', - '🦿': 'mechanical leg', - '🦵': 'leg', - '🦶': 'foot', - '👂': 'ear', - '🦻': 'ear with hearing aid', - '👃': 'nose', - '🧠': 'brain', - '🫀': 'anatomical heart', - '🫁': 'lungs', - '🦷': 'tooth', - '🦴': 'bone', - '👀': 'eyes', - '👁': 'eye', - '👅': 'tongue', - '👄': 'mouth', - '🫦': '⊛ biting lip', - '👶': 'baby', - '🧒': 'child', - '👦': 'boy', - '👧': 'girl', - '🧑': 'person', - '👱': 'person: blond hair', - '👨': 'man', - '🧔': 'person: beard', - '🧔‍♂️': 'man: beard', - '🧔‍♀️': 'woman: beard', - '👨‍🦰': 'man: red hair', - '👨‍🦱': 'man: curly hair', - '👨‍🦳': 'man: white hair', - '👨‍🦲': 'man: bald', - '👩': 'woman', - '👩‍🦰': 'woman: red hair', - '🧑‍🦰': 'person: red hair', - '👩‍🦱': 'woman: curly hair', - '🧑‍🦱': 'person: curly hair', - '👩‍🦳': 'woman: white hair', - '🧑‍🦳': 'person: white hair', - '👩‍🦲': 'woman: bald', - '🧑‍🦲': 'person: bald', - '👱‍♀️': 'woman: blond hair', - '👱‍♂️': 'man: blond hair', - '🧓': 'older person', - '👴': 'old man', - '👵': 'old woman', - '🙍': 'person frowning', - '🙍‍♂️': 'man frowning', - '🙍‍♀️': 'woman frowning', - '🙎': 'person pouting', - '🙎‍♂️': 'man pouting', - '🙎‍♀️': 'woman pouting', - '🙅': 'person gesturing NO', - '🙅‍♂️': 'man gesturing NO', - '🙅‍♀️': 'woman gesturing NO', - '🙆': 'person gesturing OK', - '🙆‍♂️': 'man gesturing OK', - '🙆‍♀️': 'woman gesturing OK', - '💁': 'person tipping hand', - '💁‍♂️': 'man tipping hand', - '💁‍♀️': 'woman tipping hand', - '🙋': 'person raising hand', - '🙋‍♂️': 'man raising hand', - '🙋‍♀️': 'woman raising hand', - '🧏': 'deaf person', - '🧏‍♂️': 'deaf man', - '🧏‍♀️': 'deaf woman', - '🙇': 'person bowing', - '🙇‍♂️': 'man bowing', - '🙇‍♀️': 'woman bowing', - '🤦': 'person facepalming', - '🤦‍♂️': 'man facepalming', - '🤦‍♀️': 'woman facepalming', - '🤷': 'person shrugging', - '🤷‍♂️': 'man shrugging', - '🤷‍♀️': 'woman shrugging', - '🧑‍⚕️': 'health worker', - '👨‍⚕️': 'man health worker', - '👩‍⚕️': 'woman health worker', - '🧑‍🎓': 'student', - '👨‍🎓': 'man student', - '👩‍🎓': 'woman student', - '🧑‍🏫': 'teacher', - '👨‍🏫': 'man teacher', - '👩‍🏫': 'woman teacher', - '🧑‍⚖️': 'judge', - '👨‍⚖️': 'man judge', - '👩‍⚖️': 'woman judge', - '🧑‍🌾': 'farmer', - '👨‍🌾': 'man farmer', - '👩‍🌾': 'woman farmer', - '🧑‍🍳': 'cook', - '👨‍🍳': 'man cook', - '👩‍🍳': 'woman cook', - '🧑‍🔧': 'mechanic', - '👨‍🔧': 'man mechanic', - '👩‍🔧': 'woman mechanic', - '🧑‍🏭': 'factory worker', - '👨‍🏭': 'man factory worker', - '👩‍🏭': 'woman factory worker', - '🧑‍💼': 'office worker', - '👨‍💼': 'man office worker', - '👩‍💼': 'woman office worker', - '🧑‍🔬': 'scientist', - '👨‍🔬': 'man scientist', - '👩‍🔬': 'woman scientist', - '🧑‍💻': 'technologist', - '👨‍💻': 'man technologist', - '👩‍💻': 'woman technologist', - '🧑‍🎤': 'singer', - '👨‍🎤': 'man singer', - '👩‍🎤': 'woman singer', - '🧑‍🎨': 'artist', - '👨‍🎨': 'man artist', - '👩‍🎨': 'woman artist', - '🧑‍✈️': 'pilot', - '👨‍✈️': 'man pilot', - '👩‍✈️': 'woman pilot', - '🧑‍🚀': 'astronaut', - '👨‍🚀': 'man astronaut', - '👩‍🚀': 'woman astronaut', - '🧑‍🚒': 'firefighter', - '👨‍🚒': 'man firefighter', - '👩‍🚒': 'woman firefighter', - '👮': 'police officer', - '👮‍♂️': 'man police officer', - '👮‍♀️': 'woman police officer', - '🕵': 'detective', - '🕵️‍♂️': 'man detective', - '🕵️‍♀️': 'woman detective', - '💂': 'guard', - '💂‍♂️': 'man guard', - '💂‍♀️': 'woman guard', - '🥷': 'ninja', - '👷': 'construction worker', - '👷‍♂️': 'man construction worker', - '👷‍♀️': 'woman construction worker', - '🫅': '⊛ person with crown', - '🤴': 'prince', - '👸': 'princess', - '👳': 'person wearing turban', - '👳‍♂️': 'man wearing turban', - '👳‍♀️': 'woman wearing turban', - '👲': 'person with skullcap', - '🧕': 'woman with headscarf', - '🤵': 'person in tuxedo', - '🤵‍♂️': 'man in tuxedo', - '🤵‍♀️': 'woman in tuxedo', - '👰': 'person with veil', - '👰‍♂️': 'man with veil', - '👰‍♀️': 'woman with veil', - '🤰': 'pregnant woman', - '🫃': '⊛ pregnant man', - '🫄': '⊛ pregnant person', - '🤱': 'breast-feeding', - '👩‍🍼': 'woman feeding baby', - '👨‍🍼': 'man feeding baby', - '🧑‍🍼': 'person feeding baby', - '👼': 'baby angel', - '🎅': 'Santa Claus', - '🤶': 'Mrs. Claus', - '🧑‍🎄': 'mx claus', - '🦸': 'superhero', - '🦸‍♂️': 'man superhero', - '🦸‍♀️': 'woman superhero', - '🦹': 'supervillain', - '🦹‍♂️': 'man supervillain', - '🦹‍♀️': 'woman supervillain', - '🧙': 'mage', - '🧙‍♂️': 'man mage', - '🧙‍♀️': 'woman mage', - '🧚': 'fairy', - '🧚‍♂️': 'man fairy', - '🧚‍♀️': 'woman fairy', - '🧛': 'vampire', - '🧛‍♂️': 'man vampire', - '🧛‍♀️': 'woman vampire', - '🧜': 'merperson', - '🧜‍♂️': 'merman', - '🧜‍♀️': 'mermaid', - '🧝': 'elf', - '🧝‍♂️': 'man elf', - '🧝‍♀️': 'woman elf', - '🧞': 'genie', - '🧞‍♂️': 'man genie', - '🧞‍♀️': 'woman genie', - '🧟': 'zombie', - '🧟‍♂️': 'man zombie', - '🧟‍♀️': 'woman zombie', - '🧌': '⊛ troll', - '💆': 'person getting massage', - '💆‍♂️': 'man getting massage', - '💆‍♀️': 'woman getting massage', - '💇': 'person getting haircut', - '💇‍♂️': 'man getting haircut', - '💇‍♀️': 'woman getting haircut', - '🚶': 'person walking', - '🚶‍♂️': 'man walking', - '🚶‍♀️': 'woman walking', - '🧍': 'person standing', - '🧍‍♂️': 'man standing', - '🧍‍♀️': 'woman standing', - '🧎': 'person kneeling', - '🧎‍♂️': 'man kneeling', - '🧎‍♀️': 'woman kneeling', - '🧑‍🦯': 'person with white cane', - '👨‍🦯': 'man with white cane', - '👩‍🦯': 'woman with white cane', - '🧑‍🦼': 'person in motorized wheelchair', - '👨‍🦼': 'man in motorized wheelchair', - '👩‍🦼': 'woman in motorized wheelchair', - '🧑‍🦽': 'person in manual wheelchair', - '👨‍🦽': 'man in manual wheelchair', - '👩‍🦽': 'woman in manual wheelchair', - '🏃': 'person running', - '🏃‍♂️': 'man running', - '🏃‍♀️': 'woman running', - '💃': 'woman dancing', - '🕺': 'man dancing', - '🕴': 'person in suit levitating', - '👯': 'people with bunny ears', - '👯‍♂️': 'men with bunny ears', - '👯‍♀️': 'women with bunny ears', - '🧖': 'person in steamy room', - '🧖‍♂️': 'man in steamy room', - '🧖‍♀️': 'woman in steamy room', - '🧗': 'person climbing', - '🧗‍♂️': 'man climbing', - '🧗‍♀️': 'woman climbing', - '🤺': 'person fencing', - '🏇': 'horse racing', - '⛷': 'skier', - '🏂': 'snowboarder', - '🏌': 'person golfing', - '🏌️‍♂️': 'man golfing', - '🏌️‍♀️': 'woman golfing', - '🏄': 'person surfing', - '🏄‍♂️': 'man surfing', - '🏄‍♀️': 'woman surfing', - '🚣': 'person rowing boat', - '🚣‍♂️': 'man rowing boat', - '🚣‍♀️': 'woman rowing boat', - '🏊': 'person swimming', - '🏊‍♂️': 'man swimming', - '🏊‍♀️': 'woman swimming', - '⛹': 'person bouncing ball', - '⛹️‍♂️': 'man bouncing ball', - '⛹️‍♀️': 'woman bouncing ball', - '🏋': 'person lifting weights', - '🏋️‍♂️': 'man lifting weights', - '🏋️‍♀️': 'woman lifting weights', - '🚴': 'person biking', - '🚴‍♂️': 'man biking', - '🚴‍♀️': 'woman biking', - '🚵': 'person mountain biking', - '🚵‍♂️': 'man mountain biking', - '🚵‍♀️': 'woman mountain biking', - '🤸': 'person cartwheeling', - '🤸‍♂️': 'man cartwheeling', - '🤸‍♀️': 'woman cartwheeling', - '🤼': 'people wrestling', - '🤼‍♂️': 'men wrestling', - '🤼‍♀️': 'women wrestling', - '🤽': 'person playing water polo', - '🤽‍♂️': 'man playing water polo', - '🤽‍♀️': 'woman playing water polo', - '🤾': 'person playing handball', - '🤾‍♂️': 'man playing handball', - '🤾‍♀️': 'woman playing handball', - '🤹': 'person juggling', - '🤹‍♂️': 'man juggling', - '🤹‍♀️': 'woman juggling', - '🧘': 'person in lotus position', - '🧘‍♂️': 'man in lotus position', - '🧘‍♀️': 'woman in lotus position', - '🛀': 'person taking bath', - '🛌': 'person in bed', - '🧑‍🤝‍🧑': 'people holding hands', - '👭': 'women holding hands', - '👫': 'woman and man holding hands', - '👬': 'men holding hands', - '💏': 'kiss', - '👩‍❤️‍💋‍👨': 'kiss: woman, man', - '👨‍❤️‍💋‍👨': 'kiss: man, man', - '👩‍❤️‍💋‍👩': 'kiss: woman, woman', - '💑': 'couple with heart', - '👩‍❤️‍👨': 'couple with heart: woman, man', - '👨‍❤️‍👨': 'couple with heart: man, man', - '👩‍❤️‍👩': 'couple with heart: woman, woman', - '👪': 'family', - '👨‍👩‍👦': 'family: man, woman, boy', - '👨‍👩‍👧': 'family: man, woman, girl', - '👨‍👩‍👧‍👦': 'family: man, woman, girl, boy', - '👨‍👩‍👦‍👦': 'family: man, woman, boy, boy', - '👨‍👩‍👧‍👧': 'family: man, woman, girl, girl', - '👨‍👨‍👦': 'family: man, man, boy', - '👨‍👨‍👧': 'family: man, man, girl', - '👨‍👨‍👧‍👦': 'family: man, man, girl, boy', - '👨‍👨‍👦‍👦': 'family: man, man, boy, boy', - '👨‍👨‍👧‍👧': 'family: man, man, girl, girl', - '👩‍👩‍👦': 'family: woman, woman, boy', - '👩‍👩‍👧': 'family: woman, woman, girl', - '👩‍👩‍👧‍👦': 'family: woman, woman, girl, boy', - '👩‍👩‍👦‍👦': 'family: woman, woman, boy, boy', - '👩‍👩‍👧‍👧': 'family: woman, woman, girl, girl', - '👨‍👦': 'family: man, boy', - '👨‍👦‍👦': 'family: man, boy, boy', - '👨‍👧': 'family: man, girl', - '👨‍👧‍👦': 'family: man, girl, boy', - '👨‍👧‍👧': 'family: man, girl, girl', - '👩‍👦': 'family: woman, boy', - '👩‍👦‍👦': 'family: woman, boy, boy', - '👩‍👧': 'family: woman, girl', - '👩‍👧‍👦': 'family: woman, girl, boy', - '👩‍👧‍👧': 'family: woman, girl, girl', - '🗣': 'speaking head', - '👤': 'bust in silhouette', - '👥': 'busts in silhouette', - '🫂': 'people hugging', - '👣': 'footprints', - '🦰': 'red hair', - '🦱': 'curly hair', - '🦳': 'white hair', - '🦲': 'bald', - '🐵': 'monkey face', - '🐒': 'monkey', - '🦍': 'gorilla', - '🦧': 'orangutan', - '🐶': 'dog face', - '🐕': 'dog', - '🦮': 'guide dog', - '🐕‍🦺': 'service dog', - '🐩': 'poodle', - '🐺': 'wolf', - '🦊': 'fox', - '🦝': 'raccoon', - '🐱': 'cat face', - '🐈': 'cat', - '🐈‍⬛': 'black cat', - '🦁': 'lion', - '🐯': 'tiger face', - '🐅': 'tiger', - '🐆': 'leopard', - '🐴': 'horse face', - '🐎': 'horse', - '🦄': 'unicorn', - '🦓': 'zebra', - '🦌': 'deer', - '🦬': 'bison', - '🐮': 'cow face', - '🐂': 'ox', - '🐃': 'water buffalo', - '🐄': 'cow', - '🐷': 'pig face', - '🐖': 'pig', - '🐗': 'boar', - '🐽': 'pig nose', - '🐏': 'ram', - '🐑': 'ewe', - '🐐': 'goat', - '🐪': 'camel', - '🐫': 'two-hump camel', - '🦙': 'llama', - '🦒': 'giraffe', - '🐘': 'elephant', - '🦣': 'mammoth', - '🦏': 'rhinoceros', - '🦛': 'hippopotamus', - '🐭': 'mouse face', - '🐁': 'mouse', - '🐀': 'rat', - '🐹': 'hamster', - '🐰': 'rabbit face', - '🐇': 'rabbit', - '🐿': 'chipmunk', - '🦫': 'beaver', - '🦔': 'hedgehog', - '🦇': 'bat', - '🐻': 'bear', - '🐻‍❄️': 'polar bear', - '🐨': 'koala', - '🐼': 'panda', - '🦥': 'sloth', - '🦦': 'otter', - '🦨': 'skunk', - '🦘': 'kangaroo', - '🦡': 'badger', - '🐾': 'paw prints', - '🦃': 'turkey', - '🐔': 'chicken', - '🐓': 'rooster', - '🐣': 'hatching chick', - '🐤': 'baby chick', - '🐥': 'front-facing baby chick', - '🐦': 'bird', - '🐧': 'penguin', - '🕊': 'dove', - '🦅': 'eagle', - '🦆': 'duck', - '🦢': 'swan', - '🦉': 'owl', - '🦤': 'dodo', - '🪶': 'feather', - '🦩': 'flamingo', - '🦚': 'peacock', - '🦜': 'parrot', - '🐸': 'frog', - '🐊': 'crocodile', - '🐢': 'turtle', - '🦎': 'lizard', - '🐍': 'snake', - '🐲': 'dragon face', - '🐉': 'dragon', - '🦕': 'sauropod', - '🦖': 'T-Rex', - '🐳': 'spouting whale', - '🐋': 'whale', - '🐬': 'dolphin', - '🦭': 'seal', - '🐟': 'fish', - '🐠': 'tropical fish', - '🐡': 'blowfish', - '🦈': 'shark', - '🐙': 'octopus', - '🐚': 'spiral shell', - '🪸': '⊛ coral', - '🐌': 'snail', - '🦋': 'butterfly', - '🐛': 'bug', - '🐜': 'ant', - '🐝': 'honeybee', - '🪲': 'beetle', - '🐞': 'lady beetle', - '🦗': 'cricket', - '🪳': 'cockroach', - '🕷': 'spider', - '🕸': 'spider web', - '🦂': 'scorpion', - '🦟': 'mosquito', - '🪰': 'fly', - '🪱': 'worm', - '🦠': 'microbe', - '💐': 'bouquet', - '🌸': 'cherry blossom', - '💮': 'white flower', - '🪷': '⊛ lotus', - '🏵': 'rosette', - '🌹': 'rose', - '🥀': 'wilted flower', - '🌺': 'hibiscus', - '🌻': 'sunflower', - '🌼': 'blossom', - '🌷': 'tulip', - '🌱': 'seedling', - '🪴': 'potted plant', - '🌲': 'evergreen tree', - '🌳': 'deciduous tree', - '🌴': 'palm tree', - '🌵': 'cactus', - '🌾': 'sheaf of rice', - '🌿': 'herb', - '☘': 'shamrock', - '🍀': 'four leaf clover', - '🍁': 'maple leaf', - '🍂': 'fallen leaf', - '🍃': 'leaf fluttering in wind', - '🪹': '⊛ empty nest', - '🪺': '⊛ nest with eggs', - '🍇': 'grapes', - '🍈': 'melon', - '🍉': 'watermelon', - '🍊': 'tangerine', - '🍋': 'lemon', - '🍌': 'banana', - '🍍': 'pineapple', - '🥭': 'mango', - '🍎': 'red apple', - '🍏': 'green apple', - '🍐': 'pear', - '🍑': 'peach', - '🍒': 'cherries', - '🍓': 'strawberry', - '🫐': 'blueberries', - '🥝': 'kiwi fruit', - '🍅': 'tomato', - '🫒': 'olive', - '🥥': 'coconut', - '🥑': 'avocado', - '🍆': 'eggplant', - '🥔': 'potato', - '🥕': 'carrot', - '🌽': 'ear of corn', - '🌶': 'hot pepper', - '🫑': 'bell pepper', - '🥒': 'cucumber', - '🥬': 'leafy green', - '🥦': 'broccoli', - '🧄': 'garlic', - '🧅': 'onion', - '🍄': 'mushroom', - '🥜': 'peanuts', - '🫘': '⊛ beans', - '🌰': 'chestnut', - '🍞': 'bread', - '🥐': 'croissant', - '🥖': 'baguette bread', - '🫓': 'flatbread', - '🥨': 'pretzel', - '🥯': 'bagel', - '🥞': 'pancakes', - '🧇': 'waffle', - '🧀': 'cheese wedge', - '🍖': 'meat on bone', - '🍗': 'poultry leg', - '🥩': 'cut of meat', - '🥓': 'bacon', - '🍔': 'hamburger', - '🍟': 'french fries', - '🍕': 'pizza', - '🌭': 'hot dog', - '🥪': 'sandwich', - '🌮': 'taco', - '🌯': 'burrito', - '🫔': 'tamale', - '🥙': 'stuffed flatbread', - '🧆': 'falafel', - '🥚': 'egg', - '🍳': 'cooking', - '🥘': 'shallow pan of food', - '🍲': 'pot of food', - '🫕': 'fondue', - '🥣': 'bowl with spoon', - '🥗': 'green salad', - '🍿': 'popcorn', - '🧈': 'butter', - '🧂': 'salt', - '🥫': 'canned food', - '🍱': 'bento box', - '🍘': 'rice cracker', - '🍙': 'rice ball', - '🍚': 'cooked rice', - '🍛': 'curry rice', - '🍜': 'steaming bowl', - '🍝': 'spaghetti', - '🍠': 'roasted sweet potato', - '🍢': 'oden', - '🍣': 'sushi', - '🍤': 'fried shrimp', - '🍥': 'fish cake with swirl', - '🥮': 'moon cake', - '🍡': 'dango', - '🥟': 'dumpling', - '🥠': 'fortune cookie', - '🥡': 'takeout box', - '🦀': 'crab', - '🦞': 'lobster', - '🦐': 'shrimp', - '🦑': 'squid', - '🦪': 'oyster', - '🍦': 'soft ice cream', - '🍧': 'shaved ice', - '🍨': 'ice cream', - '🍩': 'doughnut', - '🍪': 'cookie', - '🎂': 'birthday cake', - '🍰': 'shortcake', - '🧁': 'cupcake', - '🥧': 'pie', - '🍫': 'chocolate bar', - '🍬': 'candy', - '🍭': 'lollipop', - '🍮': 'custard', - '🍯': 'honey pot', - '🍼': 'baby bottle', - '🥛': 'glass of milk', - '☕': 'hot beverage', - '🫖': 'teapot', - '🍵': 'teacup without handle', - '🍶': 'sake', - '🍾': 'bottle with popping cork', - '🍷': 'wine glass', - '🍸': 'cocktail glass', - '🍹': 'tropical drink', - '🍺': 'beer mug', - '🍻': 'clinking beer mugs', - '🥂': 'clinking glasses', - '🥃': 'tumbler glass', - '🫗': '⊛ pouring liquid', - '🥤': 'cup with straw', - '🧋': 'bubble tea', - '🧃': 'beverage box', - '🧉': 'mate', - '🧊': 'ice', - '🥢': 'chopsticks', - '🍽': 'fork and knife with plate', - '🍴': 'fork and knife', - '🥄': 'spoon', - '🔪': 'kitchen knife', - '🫙': '⊛ jar', - '🏺': 'amphora', - '🌍': 'globe showing Europe-Africa', - '🌎': 'globe showing Americas', - '🌏': 'globe showing Asia-Australia', - '🌐': 'globe with meridians', - '🗺': 'world map', - '🗾': 'map of Japan', - '🧭': 'compass', - '🏔': 'snow-capped mountain', - '⛰': 'mountain', - '🌋': 'volcano', - '🗻': 'mount fuji', - '🏕': 'camping', - '🏖': 'beach with umbrella', - '🏜': 'desert', - '🏝': 'desert island', - '🏞': 'national park', - '🏟': 'stadium', - '🏛': 'classical building', - '🏗': 'building construction', - '🧱': 'brick', - '🪨': 'rock', - '🪵': 'wood', - '🛖': 'hut', - '🏘': 'houses', - '🏚': 'derelict house', - '🏠': 'house', - '🏡': 'house with garden', - '🏢': 'office building', - '🏣': 'Japanese post office', - '🏤': 'post office', - '🏥': 'hospital', - '🏦': 'bank', - '🏨': 'hotel', - '🏩': 'love hotel', - '🏪': 'convenience store', - '🏫': 'school', - '🏬': 'department store', - '🏭': 'factory', - '🏯': 'Japanese castle', - '🏰': 'castle', - '💒': 'wedding', - '🗼': 'Tokyo tower', - '🗽': 'Statue of Liberty', - '⛪': 'church', - '🕌': 'mosque', - '🛕': 'hindu temple', - '🕍': 'synagogue', - '⛩': 'shinto shrine', - '🕋': 'kaaba', - '⛲': 'fountain', - '⛺': 'tent', - '🌁': 'foggy', - '🌃': 'night with stars', - '🏙': 'cityscape', - '🌄': 'sunrise over mountains', - '🌅': 'sunrise', - '🌆': 'cityscape at dusk', - '🌇': 'sunset', - '🌉': 'bridge at night', - '♨': 'hot springs', - '🎠': 'carousel horse', - '🛝': '⊛ playground slide', - '🎡': 'ferris wheel', - '🎢': 'roller coaster', - '💈': 'barber pole', - '🎪': 'circus tent', - '🚂': 'locomotive', - '🚃': 'railway car', - '🚄': 'high-speed train', - '🚅': 'bullet train', - '🚆': 'train', - '🚇': 'metro', - '🚈': 'light rail', - '🚉': 'station', - '🚊': 'tram', - '🚝': 'monorail', - '🚞': 'mountain railway', - '🚋': 'tram car', - '🚌': 'bus', - '🚍': 'oncoming bus', - '🚎': 'trolleybus', - '🚐': 'minibus', - '🚑': 'ambulance', - '🚒': 'fire engine', - '🚓': 'police car', - '🚔': 'oncoming police car', - '🚕': 'taxi', - '🚖': 'oncoming taxi', - '🚗': 'automobile', - '🚘': 'oncoming automobile', - '🚙': 'sport utility vehicle', - '🛻': 'pickup truck', - '🚚': 'delivery truck', - '🚛': 'articulated lorry', - '🚜': 'tractor', - '🏎': 'racing car', - '🏍': 'motorcycle', - '🛵': 'motor scooter', - '🦽': 'manual wheelchair', - '🦼': 'motorized wheelchair', - '🛺': 'auto rickshaw', - '🚲': 'bicycle', - '🛴': 'kick scooter', - '🛹': 'skateboard', - '🛼': 'roller skate', - '🚏': 'bus stop', - '🛣': 'motorway', - '🛤': 'railway track', - '🛢': 'oil drum', - '⛽': 'fuel pump', - '🛞': '⊛ wheel', - '🚨': 'police car light', - '🚥': 'horizontal traffic light', - '🚦': 'vertical traffic light', - '🛑': 'stop sign', - '🚧': 'construction', - '⚓': 'anchor', - '🛟': '⊛ ring buoy', - '⛵': 'sailboat', - '🛶': 'canoe', - '🚤': 'speedboat', - '🛳': 'passenger ship', - '⛴': 'ferry', - '🛥': 'motor boat', - '🚢': 'ship', - '✈': 'airplane', - '🛩': 'small airplane', - '🛫': 'airplane departure', - '🛬': 'airplane arrival', - '🪂': 'parachute', - '💺': 'seat', - '🚁': 'helicopter', - '🚟': 'suspension railway', - '🚠': 'mountain cableway', - '🚡': 'aerial tramway', - '🛰': 'satellite', - '🚀': 'rocket', - '🛸': 'flying saucer', - '🛎': 'bellhop bell', - '🧳': 'luggage', - '⌛': 'hourglass done', - '⏳': 'hourglass not done', - '⌚': 'watch', - '⏰': 'alarm clock', - '⏱': 'stopwatch', - '⏲': 'timer clock', - '🕰': 'mantelpiece clock', - '🕛': 'twelve o’clock', - '🕧': 'twelve-thirty', - '🕐': 'one o’clock', - '🕜': 'one-thirty', - '🕑': 'two o’clock', - '🕝': 'two-thirty', - '🕒': 'three o’clock', - '🕞': 'three-thirty', - '🕓': 'four o’clock', - '🕟': 'four-thirty', - '🕔': 'five o’clock', - '🕠': 'five-thirty', - '🕕': 'six o’clock', - '🕡': 'six-thirty', - '🕖': 'seven o’clock', - '🕢': 'seven-thirty', - '🕗': 'eight o’clock', - '🕣': 'eight-thirty', - '🕘': 'nine o’clock', - '🕤': 'nine-thirty', - '🕙': 'ten o’clock', - '🕥': 'ten-thirty', - '🕚': 'eleven o’clock', - '🕦': 'eleven-thirty', - '🌑': 'new moon', - '🌒': 'waxing crescent moon', - '🌓': 'first quarter moon', - '🌔': 'waxing gibbous moon', - '🌕': 'full moon', - '🌖': 'waning gibbous moon', - '🌗': 'last quarter moon', - '🌘': 'waning crescent moon', - '🌙': 'crescent moon', - '🌚': 'new moon face', - '🌛': 'first quarter moon face', - '🌜': 'last quarter moon face', - '🌡': 'thermometer', - '☀': 'sun', - '🌝': 'full moon face', - '🌞': 'sun with face', - '🪐': 'ringed planet', - '⭐': 'star', - '🌟': 'glowing star', - '🌠': 'shooting star', - '🌌': 'milky way', - '☁': 'cloud', - '⛅': 'sun behind cloud', - '⛈': 'cloud with lightning and rain', - '🌤': 'sun behind small cloud', - '🌥': 'sun behind large cloud', - '🌦': 'sun behind rain cloud', - '🌧': 'cloud with rain', - '🌨': 'cloud with snow', - '🌩': 'cloud with lightning', - '🌪': 'tornado', - '🌫': 'fog', - '🌬': 'wind face', - '🌀': 'cyclone', - '🌈': 'rainbow', - '🌂': 'closed umbrella', - '☂': 'umbrella', - '☔': 'umbrella with rain drops', - '⛱': 'umbrella on ground', - '⚡': 'high voltage', - '❄': 'snowflake', - '☃': 'snowman', - '⛄': 'snowman without snow', - '☄': 'comet', - '🔥': 'fire', - '💧': 'droplet', - '🌊': 'water wave', - '🎃': 'jack-o-lantern', - '🎄': 'Christmas tree', - '🎆': 'fireworks', - '🎇': 'sparkler', - '🧨': 'firecracker', - '✨': 'sparkles', - '🎈': 'balloon', - '🎉': 'party popper', - '🎊': 'confetti ball', - '🎋': 'tanabata tree', - '🎍': 'pine decoration', - '🎎': 'Japanese dolls', - '🎏': 'carp streamer', - '🎐': 'wind chime', - '🎑': 'moon viewing ceremony', - '🧧': 'red envelope', - '🎀': 'ribbon', - '🎁': 'wrapped gift', - '🎗': 'reminder ribbon', - '🎟': 'admission tickets', - '🎫': 'ticket', - '🎖': 'military medal', - '🏆': 'trophy', - '🏅': 'sports medal', - '🥇': '1st place medal', - '🥈': '2nd place medal', - '🥉': '3rd place medal', - '⚽': 'soccer ball', - '⚾': 'baseball', - '🥎': 'softball', - '🏀': 'basketball', - '🏐': 'volleyball', - '🏈': 'american football', - '🏉': 'rugby football', - '🎾': 'tennis', - '🥏': 'flying disc', - '🎳': 'bowling', - '🏏': 'cricket game', - '🏑': 'field hockey', - '🏒': 'ice hockey', - '🥍': 'lacrosse', - '🏓': 'ping pong', - '🏸': 'badminton', - '🥊': 'boxing glove', - '🥋': 'martial arts uniform', - '🥅': 'goal net', - '⛳': 'flag in hole', - '⛸': 'ice skate', - '🎣': 'fishing pole', - '🤿': 'diving mask', - '🎽': 'running shirt', - '🎿': 'skis', - '🛷': 'sled', - '🥌': 'curling stone', - '🎯': 'bullseye', - '🪀': 'yo-yo', - '🪁': 'kite', - '🎱': 'pool 8 ball', - '🔮': 'crystal ball', - '🪄': 'magic wand', - '🧿': 'nazar amulet', - '🪬': '⊛ hamsa', - '🎮': 'video game', - '🕹': 'joystick', - '🎰': 'slot machine', - '🎲': 'game die', - '🧩': 'puzzle piece', - '🧸': 'teddy bear', - '🪅': 'piñata', - '🪩': '⊛ mirror ball', - '🪆': 'nesting dolls', - '♠': 'spade suit', - '♥': 'heart suit', - '♦': 'diamond suit', - '♣': 'club suit', - '♟': 'chess pawn', - '🃏': 'joker', - '🀄': 'mahjong red dragon', - '🎴': 'flower playing cards', - '🎭': 'performing arts', - '🖼': 'framed picture', - '🎨': 'artist palette', - '🧵': 'thread', - '🪡': 'sewing needle', - '🧶': 'yarn', - '🪢': 'knot', - '👓': 'glasses', - '🕶': 'sunglasses', - '🥽': 'goggles', - '🥼': 'lab coat', - '🦺': 'safety vest', - '👔': 'necktie', - '👕': 't-shirt', - '👖': 'jeans', - '🧣': 'scarf', - '🧤': 'gloves', - '🧥': 'coat', - '🧦': 'socks', - '👗': 'dress', - '👘': 'kimono', - '🥻': 'sari', - '🩱': 'one-piece swimsuit', - '🩲': 'briefs', - '🩳': 'shorts', - '👙': 'bikini', - '👚': 'woman’s clothes', - '👛': 'purse', - '👜': 'handbag', - '👝': 'clutch bag', - '🛍': 'shopping bags', - '🎒': 'backpack', - '🩴': 'thong sandal', - '👞': 'man’s shoe', - '👟': 'running shoe', - '🥾': 'hiking boot', - '🥿': 'flat shoe', - '👠': 'high-heeled shoe', - '👡': 'woman’s sandal', - '🩰': 'ballet shoes', - '👢': 'woman’s boot', - '👑': 'crown', - '👒': 'woman’s hat', - '🎩': 'top hat', - '🎓': 'graduation cap', - '🧢': 'billed cap', - '🪖': 'military helmet', - '⛑': 'rescue worker’s helmet', - '📿': 'prayer beads', - '💄': 'lipstick', - '💍': 'ring', - '💎': 'gem stone', - '🔇': 'muted speaker', - '🔈': 'speaker low volume', - '🔉': 'speaker medium volume', - '🔊': 'speaker high volume', - '📢': 'loudspeaker', - '📣': 'megaphone', - '📯': 'postal horn', - '🔔': 'bell', - '🔕': 'bell with slash', - '🎼': 'musical score', - '🎵': 'musical note', - '🎶': 'musical notes', - '🎙': 'studio microphone', - '🎚': 'level slider', - '🎛': 'control knobs', - '🎤': 'microphone', - '🎧': 'headphone', - '📻': 'radio', - '🎷': 'saxophone', - '🪗': 'accordion', - '🎸': 'guitar', - '🎹': 'musical keyboard', - '🎺': 'trumpet', - '🎻': 'violin', - '🪕': 'banjo', - '🥁': 'drum', - '🪘': 'long drum', - '📱': 'mobile phone', - '📲': 'mobile phone with arrow', - '☎': 'telephone', - '📞': 'telephone receiver', - '📟': 'pager', - '📠': 'fax machine', - '🔋': 'battery', - '🪫': '⊛ low battery', - '🔌': 'electric plug', - '💻': 'laptop', - '🖥': 'desktop computer', - '🖨': 'printer', - '⌨': 'keyboard', - '🖱': 'computer mouse', - '🖲': 'trackball', - '💽': 'computer disk', - '💾': 'floppy disk', - '💿': 'optical disk', - '📀': 'dvd', - '🧮': 'abacus', - '🎥': 'movie camera', - '🎞': 'film frames', - '📽': 'film projector', - '🎬': 'clapper board', - '📺': 'television', - '📷': 'camera', - '📸': 'camera with flash', - '📹': 'video camera', - '📼': 'videocassette', - '🔍': 'magnifying glass tilted left', - '🔎': 'magnifying glass tilted right', - '🕯': 'candle', - '💡': 'light bulb', - '🔦': 'flashlight', - '🏮': 'red paper lantern', - '🪔': 'diya lamp', - '📔': 'notebook with decorative cover', - '📕': 'closed book', - '📖': 'open book', - '📗': 'green book', - '📘': 'blue book', - '📙': 'orange book', - '📚': 'books', - '📓': 'notebook', - '📒': 'ledger', - '📃': 'page with curl', - '📜': 'scroll', - '📄': 'page facing up', - '📰': 'newspaper', - '🗞': 'rolled-up newspaper', - '📑': 'bookmark tabs', - '🔖': 'bookmark', - '🏷': 'label', - '💰': 'money bag', - '🪙': 'coin', - '💴': 'yen banknote', - '💵': 'dollar banknote', - '💶': 'euro banknote', - '💷': 'pound banknote', - '💸': 'money with wings', - '💳': 'credit card', - '🧾': 'receipt', - '💹': 'chart increasing with yen', - '✉': 'envelope', - '📧': 'e-mail', - '📨': 'incoming envelope', - '📩': 'envelope with arrow', - '📤': 'outbox tray', - '📥': 'inbox tray', - '📦': 'package', - '📫': 'closed mailbox with raised flag', - '📪': 'closed mailbox with lowered flag', - '📬': 'open mailbox with raised flag', - '📭': 'open mailbox with lowered flag', - '📮': 'postbox', - '🗳': 'ballot box with ballot', - '✏': 'pencil', - '✒': 'black nib', - '🖋': 'fountain pen', - '🖊': 'pen', - '🖌': 'paintbrush', - '🖍': 'crayon', - '📝': 'memo', - '💼': 'briefcase', - '📁': 'file folder', - '📂': 'open file folder', - '🗂': 'card index dividers', - '📅': 'calendar', - '📆': 'tear-off calendar', - '🗒': 'spiral notepad', - '🗓': 'spiral calendar', - '📇': 'card index', - '📈': 'chart increasing', - '📉': 'chart decreasing', - '📊': 'bar chart', - '📋': 'clipboard', - '📌': 'pushpin', - '📍': 'round pushpin', - '📎': 'paperclip', - '🖇': 'linked paperclips', - '📏': 'straight ruler', - '📐': 'triangular ruler', - '✂': 'scissors', - '🗃': 'card file box', - '🗄': 'file cabinet', - '🗑': 'wastebasket', - '🔒': 'locked', - '🔓': 'unlocked', - '🔏': 'locked with pen', - '🔐': 'locked with key', - '🔑': 'key', - '🗝': 'old key', - '🔨': 'hammer', - '🪓': 'axe', - '⛏': 'pick', - '⚒': 'hammer and pick', - '🛠': 'hammer and wrench', - '🗡': 'dagger', - '⚔': 'crossed swords', - '🔫': 'water pistol', - '🪃': 'boomerang', - '🏹': 'bow and arrow', - '🛡': 'shield', - '🪚': 'carpentry saw', - '🔧': 'wrench', - '🪛': 'screwdriver', - '🔩': 'nut and bolt', - '⚙': 'gear', - '🗜': 'clamp', - '⚖': 'balance scale', - '🦯': 'white cane', - '🔗': 'link', - '⛓': 'chains', - '🪝': 'hook', - '🧰': 'toolbox', - '🧲': 'magnet', - '🪜': 'ladder', - '⚗': 'alembic', - '🧪': 'test tube', - '🧫': 'petri dish', - '🧬': 'dna', - '🔬': 'microscope', - '🔭': 'telescope', - '📡': 'satellite antenna', - '💉': 'syringe', - '🩸': 'drop of blood', - '💊': 'pill', - '🩹': 'adhesive bandage', - '🩼': '⊛ crutch', - '🩺': 'stethoscope', - '🩻': '⊛ x-ray', - '🚪': 'door', - '🛗': 'elevator', - '🪞': 'mirror', - '🪟': 'window', - '🛏': 'bed', - '🛋': 'couch and lamp', - '🪑': 'chair', - '🚽': 'toilet', - '🪠': 'plunger', - '🚿': 'shower', - '🛁': 'bathtub', - '🪤': 'mouse trap', - '🪒': 'razor', - '🧴': 'lotion bottle', - '🧷': 'safety pin', - '🧹': 'broom', - '🧺': 'basket', - '🧻': 'roll of paper', - '🪣': 'bucket', - '🧼': 'soap', - '🫧': '⊛ bubbles', - '🪥': 'toothbrush', - '🧽': 'sponge', - '🧯': 'fire extinguisher', - '🛒': 'shopping cart', - '🚬': 'cigarette', - '⚰': 'coffin', - '🪦': 'headstone', - '⚱': 'funeral urn', - '🗿': 'moai', - '🪧': 'placard', - '🪪': '⊛ identification card', - '🏧': 'ATM sign', - '🚮': 'litter in bin sign', - '🚰': 'potable water', - '♿': 'wheelchair symbol', - '🚹': 'men’s room', - '🚺': 'women’s room', - '🚻': 'restroom', - '🚼': 'baby symbol', - '🚾': 'water closet', - '🛂': 'passport control', - '🛃': 'customs', - '🛄': 'baggage claim', - '🛅': 'left luggage', - '⚠': 'warning', - '🚸': 'children crossing', - '⛔': 'no entry', - '🚫': 'prohibited', - '🚳': 'no bicycles', - '🚭': 'no smoking', - '🚯': 'no littering', - '🚱': 'non-potable water', - '🚷': 'no pedestrians', - '📵': 'no mobile phones', - '🔞': 'no one under eighteen', - '☢': 'radioactive', - '☣': 'biohazard', - '⬆': 'up arrow', - '↗': 'up-right arrow', - '➡': 'right arrow', - '↘': 'down-right arrow', - '⬇': 'down arrow', - '↙': 'down-left arrow', - '⬅': 'left arrow', - '↖': 'up-left arrow', - '↕': 'up-down arrow', - '↔': 'left-right arrow', - '↩': 'right arrow curving left', - '↪': 'left arrow curving right', - '⤴': 'right arrow curving up', - '⤵': 'right arrow curving down', - '🔃': 'clockwise vertical arrows', - '🔄': 'counterclockwise arrows button', - '🔙': 'BACK arrow', - '🔚': 'END arrow', - '🔛': 'ON! arrow', - '🔜': 'SOON arrow', - '🔝': 'TOP arrow', - '🛐': 'place of worship', - '⚛': 'atom symbol', - '🕉': 'om', - '✡': 'star of David', - '☸': 'wheel of dharma', - '☯': 'yin yang', - '✝': 'latin cross', - '☦': 'orthodox cross', - '☪': 'star and crescent', - '☮': 'peace symbol', - '🕎': 'menorah', - '🔯': 'dotted six-pointed star', - '♈': 'Aries', - '♉': 'Taurus', - '♊': 'Gemini', - '♋': 'Cancer', - '♌': 'Leo', - '♍': 'Virgo', - '♎': 'Libra', - '♏': 'Scorpio', - '♐': 'Sagittarius', - '♑': 'Capricorn', - '♒': 'Aquarius', - '♓': 'Pisces', - '⛎': 'Ophiuchus', - '🔀': 'shuffle tracks button', - '🔁': 'repeat button', - '🔂': 'repeat single button', - '▶': 'play button', - '⏩': 'fast-forward button', - '⏭': 'next track button', - '⏯': 'play or pause button', - '◀': 'reverse button', - '⏪': 'fast reverse button', - '⏮': 'last track button', - '🔼': 'upwards button', - '⏫': 'fast up button', - '🔽': 'downwards button', - '⏬': 'fast down button', - '⏸': 'pause button', - '⏹': 'stop button', - '⏺': 'record button', - '⏏': 'eject button', - '🎦': 'cinema', - '🔅': 'dim button', - '🔆': 'bright button', - '📶': 'antenna bars', - '📳': 'vibration mode', - '📴': 'mobile phone off', - '♀': 'female sign', - '♂': 'male sign', - '⚧': 'transgender symbol', - '✖': 'multiply', - '➕': 'plus', - '➖': 'minus', - '➗': 'divide', - '🟰': '⊛ heavy equals sign', - '♾': 'infinity', - '‼': 'double exclamation mark', - '⁉': 'exclamation question mark', - '❓': 'red question mark', - '❔': 'white question mark', - '❕': 'white exclamation mark', - '❗': 'red exclamation mark', - '〰': 'wavy dash', - '💱': 'currency exchange', - '💲': 'heavy dollar sign', - '⚕': 'medical symbol', - '♻': 'recycling symbol', - '⚜': 'fleur-de-lis', - '🔱': 'trident emblem', - '📛': 'name badge', - '🔰': 'Japanese symbol for beginner', - '⭕': 'hollow red circle', - '✅': 'check mark button', - '☑': 'check box with check', - '✔': 'check mark', - '❌': 'cross mark', - '❎': 'cross mark button', - '➰': 'curly loop', - '➿': 'double curly loop', - '〽': 'part alternation mark', - '✳': 'eight-spoked asterisk', - '✴': 'eight-pointed star', - '❇': 'sparkle', - '©': 'copyright', - '®': 'registered', - '™': 'trade mark', - '#️⃣': 'keycap: #', - '*️⃣': 'keycap: *', - '0️⃣': 'keycap: 0', - '1️⃣': 'keycap: 1', - '2️⃣': 'keycap: 2', - '3️⃣': 'keycap: 3', - '4️⃣': 'keycap: 4', - '5️⃣': 'keycap: 5', - '6️⃣': 'keycap: 6', - '7️⃣': 'keycap: 7', - '8️⃣': 'keycap: 8', - '9️⃣': 'keycap: 9', - '🔟': 'keycap: 10', - '🔠': 'input latin uppercase', - '🔡': 'input latin lowercase', - '🔢': 'input numbers', - '🔣': 'input symbols', - '🔤': 'input latin letters', - '🅰': 'A button (blood type)', - '🆎': 'AB button (blood type)', - '🅱': 'B button (blood type)', - '🆑': 'CL button', - '🆒': 'COOL button', - '🆓': 'FREE button', - ℹ: 'information', - '🆔': 'ID button', - 'Ⓜ': 'circled M', - '🆕': 'NEW button', - '🆖': 'NG button', - '🅾': 'O button (blood type)', - '🆗': 'OK button', - '🅿': 'P button', - '🆘': 'SOS button', - '🆙': 'UP! button', - '🆚': 'VS button', - '🈁': 'Japanese “here” button', - '🈂': 'Japanese “service charge” button', - '🈷': 'Japanese “monthly amount” button', - '🈶': 'Japanese “not free of charge” button', - '🈯': 'Japanese “reserved” button', - '🉐': 'Japanese “bargain” button', - '🈹': 'Japanese “discount” button', - '🈚': 'Japanese “free of charge” button', - '🈲': 'Japanese “prohibited” button', - '🉑': 'Japanese “acceptable” button', - '🈸': 'Japanese “application” button', - '🈴': 'Japanese “passing grade” button', - '🈳': 'Japanese “vacancy” button', - '㊗': 'Japanese “congratulations” button', - '㊙': 'Japanese “secret” button', - '🈺': 'Japanese “open for business” button', - '🈵': 'Japanese “no vacancy” button', - '🔴': 'red circle', - '🟠': 'orange circle', - '🟡': 'yellow circle', - '🟢': 'green circle', - '🔵': 'blue circle', - '🟣': 'purple circle', - '🟤': 'brown circle', - '⚫': 'black circle', - '⚪': 'white circle', - '🟥': 'red square', - '🟧': 'orange square', - '🟨': 'yellow square', - '🟩': 'green square', - '🟦': 'blue square', - '🟪': 'purple square', - '🟫': 'brown square', - '⬛': 'black large square', - '⬜': 'white large square', - '◼': 'black medium square', - '◻': 'white medium square', - '◾': 'black medium-small square', - '◽': 'white medium-small square', - '▪': 'black small square', - '▫': 'white small square', - '🔶': 'large orange diamond', - '🔷': 'large blue diamond', - '🔸': 'small orange diamond', - '🔹': 'small blue diamond', - '🔺': 'red triangle pointed up', - '🔻': 'red triangle pointed down', - '💠': 'diamond with a dot', - '🔘': 'radio button', - '🔳': 'white square button', - '🔲': 'black square button', - '🏁': 'chequered flag', - '🚩': 'triangular flag', - '🎌': 'crossed flags', - '🏴': 'black flag', - '🏳': 'white flag', - '🏳️‍🌈': 'rainbow flag', - '🏳️‍⚧️': 'transgender flag', - '🏴‍☠️': 'pirate flag', - '🇦🇨': 'flag: Ascension Island', - '🇦🇩': 'flag: Andorra', - '🇦🇪': 'flag: United Arab Emirates', - '🇦🇫': 'flag: Afghanistan', - '🇦🇬': 'flag: Antigua & Barbuda', - '🇦🇮': 'flag: Anguilla', - '🇦🇱': 'flag: Albania', - '🇦🇲': 'flag: Armenia', - '🇦🇴': 'flag: Angola', - '🇦🇶': 'flag: Antarctica', - '🇦🇷': 'flag: Argentina', - '🇦🇸': 'flag: American Samoa', - '🇦🇹': 'flag: Austria', - '🇦🇺': 'flag: Australia', - '🇦🇼': 'flag: Aruba', - '🇦🇽': 'flag: Åland Islands', - '🇦🇿': 'flag: Azerbaijan', - '🇧🇦': 'flag: Bosnia & Herzegovina', - '🇧🇧': 'flag: Barbados', - '🇧🇩': 'flag: Bangladesh', - '🇧🇪': 'flag: Belgium', - '🇧🇫': 'flag: Burkina Faso', - '🇧🇬': 'flag: Bulgaria', - '🇧🇭': 'flag: Bahrain', - '🇧🇮': 'flag: Burundi', - '🇧🇯': 'flag: Benin', - '🇧🇱': 'flag: St. Barthélemy', - '🇧🇲': 'flag: Bermuda', - '🇧🇳': 'flag: Brunei', - '🇧🇴': 'flag: Bolivia', - '🇧🇶': 'flag: Caribbean Netherlands', - '🇧🇷': 'flag: Brazil', - '🇧🇸': 'flag: Bahamas', - '🇧🇹': 'flag: Bhutan', - '🇧🇻': 'flag: Bouvet Island', - '🇧🇼': 'flag: Botswana', - '🇧🇾': 'flag: Belarus', - '🇧🇿': 'flag: Belize', - '🇨🇦': 'flag: Canada', - '🇨🇨': 'flag: Cocos (Keeling) Islands', - '🇨🇩': 'flag: Congo - Kinshasa', - '🇨🇫': 'flag: Central African Republic', - '🇨🇬': 'flag: Congo - Brazzaville', - '🇨🇭': 'flag: Switzerland', - '🇨🇮': 'flag: Côte d’Ivoire', - '🇨🇰': 'flag: Cook Islands', - '🇨🇱': 'flag: Chile', - '🇨🇲': 'flag: Cameroon', - '🇨🇳': 'flag: China', - '🇨🇴': 'flag: Colombia', - '🇨🇵': 'flag: Clipperton Island', - '🇨🇷': 'flag: Costa Rica', - '🇨🇺': 'flag: Cuba', - '🇨🇻': 'flag: Cape Verde', - '🇨🇼': 'flag: Curaçao', - '🇨🇽': 'flag: Christmas Island', - '🇨🇾': 'flag: Cyprus', - '🇨🇿': 'flag: Czechia', - '🇩🇪': 'flag: Germany', - '🇩🇬': 'flag: Diego Garcia', - '🇩🇯': 'flag: Djibouti', - '🇩🇰': 'flag: Denmark', - '🇩🇲': 'flag: Dominica', - '🇩🇴': 'flag: Dominican Republic', - '🇩🇿': 'flag: Algeria', - '🇪🇦': 'flag: Ceuta & Melilla', - '🇪🇨': 'flag: Ecuador', - '🇪🇪': 'flag: Estonia', - '🇪🇬': 'flag: Egypt', - '🇪🇭': 'flag: Western Sahara', - '🇪🇷': 'flag: Eritrea', - '🇪🇸': 'flag: Spain', - '🇪🇹': 'flag: Ethiopia', - '🇪🇺': 'flag: European Union', - '🇫🇮': 'flag: Finland', - '🇫🇯': 'flag: Fiji', - '🇫🇰': 'flag: Falkland Islands', - '🇫🇲': 'flag: Micronesia', - '🇫🇴': 'flag: Faroe Islands', - '🇫🇷': 'flag: France', - '🇬🇦': 'flag: Gabon', - '🇬🇧': 'flag: United Kingdom', - '🇬🇩': 'flag: Grenada', - '🇬🇪': 'flag: Georgia', - '🇬🇫': 'flag: French Guiana', - '🇬🇬': 'flag: Guernsey', - '🇬🇭': 'flag: Ghana', - '🇬🇮': 'flag: Gibraltar', - '🇬🇱': 'flag: Greenland', - '🇬🇲': 'flag: Gambia', - '🇬🇳': 'flag: Guinea', - '🇬🇵': 'flag: Guadeloupe', - '🇬🇶': 'flag: Equatorial Guinea', - '🇬🇷': 'flag: Greece', - '🇬🇸': 'flag: South Georgia & South Sandwich Islands', - '🇬🇹': 'flag: Guatemala', - '🇬🇺': 'flag: Guam', - '🇬🇼': 'flag: Guinea-Bissau', - '🇬🇾': 'flag: Guyana', - '🇭🇰': 'flag: Hong Kong SAR China', - '🇭🇲': 'flag: Heard & McDonald Islands', - '🇭🇳': 'flag: Honduras', - '🇭🇷': 'flag: Croatia', - '🇭🇹': 'flag: Haiti', - '🇭🇺': 'flag: Hungary', - '🇮🇨': 'flag: Canary Islands', - '🇮🇩': 'flag: Indonesia', - '🇮🇪': 'flag: Ireland', - '🇮🇱': 'flag: Israel', - '🇮🇲': 'flag: Isle of Man', - '🇮🇳': 'flag: India', - '🇮🇴': 'flag: British Indian Ocean Territory', - '🇮🇶': 'flag: Iraq', - '🇮🇷': 'flag: Iran', - '🇮🇸': 'flag: Iceland', - '🇮🇹': 'flag: Italy', - '🇯🇪': 'flag: Jersey', - '🇯🇲': 'flag: Jamaica', - '🇯🇴': 'flag: Jordan', - '🇯🇵': 'flag: Japan', - '🇰🇪': 'flag: Kenya', - '🇰🇬': 'flag: Kyrgyzstan', - '🇰🇭': 'flag: Cambodia', - '🇰🇮': 'flag: Kiribati', - '🇰🇲': 'flag: Comoros', - '🇰🇳': 'flag: St. Kitts & Nevis', - '🇰🇵': 'flag: North Korea', - '🇰🇷': 'flag: South Korea', - '🇰🇼': 'flag: Kuwait', - '🇰🇾': 'flag: Cayman Islands', - '🇰🇿': 'flag: Kazakhstan', - '🇱🇦': 'flag: Laos', - '🇱🇧': 'flag: Lebanon', - '🇱🇨': 'flag: St. Lucia', - '🇱🇮': 'flag: Liechtenstein', - '🇱🇰': 'flag: Sri Lanka', - '🇱🇷': 'flag: Liberia', - '🇱🇸': 'flag: Lesotho', - '🇱🇹': 'flag: Lithuania', - '🇱🇺': 'flag: Luxembourg', - '🇱🇻': 'flag: Latvia', - '🇱🇾': 'flag: Libya', - '🇲🇦': 'flag: Morocco', - '🇲🇨': 'flag: Monaco', - '🇲🇩': 'flag: Moldova', - '🇲🇪': 'flag: Montenegro', - '🇲🇫': 'flag: St. Martin', - '🇲🇬': 'flag: Madagascar', - '🇲🇭': 'flag: Marshall Islands', - '🇲🇰': 'flag: North Macedonia', - '🇲🇱': 'flag: Mali', - '🇲🇲': 'flag: Myanmar (Burma)', - '🇲🇳': 'flag: Mongolia', - '🇲🇴': 'flag: Macao SAR China', - '🇲🇵': 'flag: Northern Mariana Islands', - '🇲🇶': 'flag: Martinique', - '🇲🇷': 'flag: Mauritania', - '🇲🇸': 'flag: Montserrat', - '🇲🇹': 'flag: Malta', - '🇲🇺': 'flag: Mauritius', - '🇲🇻': 'flag: Maldives', - '🇲🇼': 'flag: Malawi', - '🇲🇽': 'flag: Mexico', - '🇲🇾': 'flag: Malaysia', - '🇲🇿': 'flag: Mozambique', - '🇳🇦': 'flag: Namibia', - '🇳🇨': 'flag: New Caledonia', - '🇳🇪': 'flag: Niger', - '🇳🇫': 'flag: Norfolk Island', - '🇳🇬': 'flag: Nigeria', - '🇳🇮': 'flag: Nicaragua', - '🇳🇱': 'flag: Netherlands', - '🇳🇴': 'flag: Norway', - '🇳🇵': 'flag: Nepal', - '🇳🇷': 'flag: Nauru', - '🇳🇺': 'flag: Niue', - '🇳🇿': 'flag: New Zealand', - '🇴🇲': 'flag: Oman', - '🇵🇦': 'flag: Panama', - '🇵🇪': 'flag: Peru', - '🇵🇫': 'flag: French Polynesia', - '🇵🇬': 'flag: Papua New Guinea', - '🇵🇭': 'flag: Philippines', - '🇵🇰': 'flag: Pakistan', - '🇵🇱': 'flag: Poland', - '🇵🇲': 'flag: St. Pierre & Miquelon', - '🇵🇳': 'flag: Pitcairn Islands', - '🇵🇷': 'flag: Puerto Rico', - '🇵🇸': 'flag: Palestinian Territories', - '🇵🇹': 'flag: Portugal', - '🇵🇼': 'flag: Palau', - '🇵🇾': 'flag: Paraguay', - '🇶🇦': 'flag: Qatar', - '🇷🇪': 'flag: Réunion', - '🇷🇴': 'flag: Romania', - '🇷🇸': 'flag: Serbia', - '🇷🇺': 'flag: Russia', - '🇷🇼': 'flag: Rwanda', - '🇸🇦': 'flag: Saudi Arabia', - '🇸🇧': 'flag: Solomon Islands', - '🇸🇨': 'flag: Seychelles', - '🇸🇩': 'flag: Sudan', - '🇸🇪': 'flag: Sweden', - '🇸🇬': 'flag: Singapore', - '🇸🇭': 'flag: St. Helena', - '🇸🇮': 'flag: Slovenia', - '🇸🇯': 'flag: Svalbard & Jan Mayen', - '🇸🇰': 'flag: Slovakia', - '🇸🇱': 'flag: Sierra Leone', - '🇸🇲': 'flag: San Marino', - '🇸🇳': 'flag: Senegal', - '🇸🇴': 'flag: Somalia', - '🇸🇷': 'flag: Suriname', - '🇸🇸': 'flag: South Sudan', - '🇸🇹': 'flag: São Tomé & Príncipe', - '🇸🇻': 'flag: El Salvador', - '🇸🇽': 'flag: Sint Maarten', - '🇸🇾': 'flag: Syria', - '🇸🇿': 'flag: Eswatini', - '🇹🇦': 'flag: Tristan da Cunha', - '🇹🇨': 'flag: Turks & Caicos Islands', - '🇹🇩': 'flag: Chad', - '🇹🇫': 'flag: French Southern Territories', - '🇹🇬': 'flag: Togo', - '🇹🇭': 'flag: Thailand', - '🇹🇯': 'flag: Tajikistan', - '🇹🇰': 'flag: Tokelau', - '🇹🇱': 'flag: Timor-Leste', - '🇹🇲': 'flag: Turkmenistan', - '🇹🇳': 'flag: Tunisia', - '🇹🇴': 'flag: Tonga', - '🇹🇷': 'flag: Turkey', - '🇹🇹': 'flag: Trinidad & Tobago', - '🇹🇻': 'flag: Tuvalu', - '🇹🇼': 'flag: Taiwan', - '🇹🇿': 'flag: Tanzania', - '🇺🇦': 'flag: Ukraine', - '🇺🇬': 'flag: Uganda', - '🇺🇲': 'flag: U.S. Outlying Islands', - '🇺🇳': 'flag: United Nations', - '🇺🇸': 'flag: United States', - '🇺🇾': 'flag: Uruguay', - '🇺🇿': 'flag: Uzbekistan', - '🇻🇦': 'flag: Vatican City', - '🇻🇨': 'flag: St. Vincent & Grenadines', - '🇻🇪': 'flag: Venezuela', - '🇻🇬': 'flag: British Virgin Islands', - '🇻🇮': 'flag: U.S. Virgin Islands', - '🇻🇳': 'flag: Vietnam', - '🇻🇺': 'flag: Vanuatu', - '🇼🇫': 'flag: Wallis & Futuna', - '🇼🇸': 'flag: Samoa', - '🇽🇰': 'flag: Kosovo', - '🇾🇪': 'flag: Yemen', - '🇾🇹': 'flag: Mayotte', - '🇿🇦': 'flag: South Africa', - '🇿🇲': 'flag: Zambia', - '🇿🇼': 'flag: Zimbabwe', - '🏴󠁧󠁢󠁥󠁮󠁧󠁿': 'flag: England', - '🏴󠁧󠁢󠁳󠁣󠁴󠁿': 'flag: Scotland', - '🏴󠁧󠁢󠁷󠁬󠁳󠁿': 'flag: Wales', -}; -const isEmoji = (str) => { - const regex = getRegex(); - const emojiMatches = str.match(regex); - const emojiString = emojiMatches ? emojiMatches.join('') : ''; - return !/\d/.test(str) && emojiString === str; -}; -const parseEmoji = (style, str, size = 16) => { - switch (style) { - case 'twemoji': - return twemoji.parse(str, { - folder: 'svg', - ext: '.svg', - attributes: () => ({ - width: `${size}px`, - height: `${size}px`, - }), - }); - case 'native': - return str; - default: - return null; - } -}; -/** - * Gets the shortcode for a given emoji by the name of the emoji. This function replaces - * spaces with underscores and removes colons. - * @param key String to replace with shortcode. - * @returns String with shortcode, or `undefined` if no shortcode exists. - */ -const getShortcode = (key) => { - var _a; - // Removable of colons is necessary for the flag shortcodes. - return (_a = shortNames[key]) === null || _a === void 0 ? void 0 : _a.replace(/\s/g, '_').replace(/:/g, '').toLowerCase(); -}; -var emoji = { - shortNames, - isEmoji, - getShortcode, - parseEmoji, - getRegex, -}; - -// Default obsidian file icon. -const DEFAULT_FILE_ICON = ''; -// Default obsidian folder icon. -const DEFAULT_FOLDER_ICON = ''; -/** - * Tries to read the file synchronously. - * @param file File that will be read. - * @returns A promise that will resolve to a string which is the content of the file. - */ -const readFileSync = (file) => __awaiter(void 0, void 0, void 0, function* () { - const content = yield new Promise((resolve) => { - const reader = new FileReader(); - reader.readAsText(file, 'UTF-8'); - reader.onload = (readerEvent) => resolve(readerEvent.target.result); - }); - return content; -}); -/** - * Gets all the currently opened files by getting the markdown leaves and then checking - * for the `file` property in the view. This also returns the leaf of the file. - * @param plugin Instance of the IconFolderPlugin. - * @returns An array of {@link FileWithLeaf} objects. - */ -const getAllOpenedFiles = (plugin) => { - return plugin.app.workspace - .getLeavesOfType('markdown') - .reduce((prev, curr) => { - const file = curr.view.file; - if (file) { - prev.push(Object.assign(Object.assign({}, file), { leaf: curr, pinned: false })); - } - return prev; - }, []); -}; -/** - * Gets the file item title element by either accessing `titleEl` or `selfEl`. - * @param fileItem FileItem which will be used to retrieve the title element from. - * @returns HTMLElement which is the title element. - */ -const getFileItemTitleEl = (fileItem) => { - var _a; - return (_a = fileItem.titleEl) !== null && _a !== void 0 ? _a : fileItem.selfEl; -}; -/** - * Gets the file item inner title element by either accessing `titleInnerEl` or `innerEl`. - * @param fileItem FileItem which will be used to retrieve the inner title element from. - * @returns HTMLElement which is the inner title element. - */ -const getFileItemInnerTitleEl = (fileItem) => { - var _a; - return (_a = fileItem.titleInnerEl) !== null && _a !== void 0 ? _a : fileItem.innerEl; -}; -/** - * A utility function which will add the icon to the icon pack and then extract the icon - * to the icon pack. - * @param plugin IconFolderPlugin that will be used for extracting the icon. - * @param iconNameWithPrefix String that will be used to add the icon to the icon pack. - */ -const saveIconToIconPack = (plugin, iconNameWithPrefix) => { - const iconNextIdentifier = nextIdentifier(iconNameWithPrefix); - const iconName = iconNameWithPrefix.substring(iconNextIdentifier); - const iconPrefix = iconNameWithPrefix.substring(0, iconNextIdentifier); - const possibleIcon = getSvgFromLoadedIcon(iconPrefix, iconName); - if (!possibleIcon) { - throw new Error(`Icon ${iconNameWithPrefix} could not be found.`); - } - const iconPackName = getIconPackNameByPrefix(iconPrefix); - const icon = getIconFromIconPack(iconPackName, iconPrefix, iconName); - extractIconToIconPack(plugin, icon, possibleIcon); -}; -/** - * A utility function which will remove the icon from the icon pack by removing the icon - * file from the icon pack directory. - * @param plugin IconFolderPlugin that will be used for removing the icon. - * @param iconNameWithPrefix String that will be used to remove the icon from the icon pack. - */ -const removeIconFromIconPack = (plugin, iconNameWithPrefix) => { - const identifier = nextIdentifier(iconNameWithPrefix); - const prefix = iconNameWithPrefix.substring(0, identifier); - const iconName = iconNameWithPrefix.substring(identifier); - const iconPackName = getIconPackNameByPrefix(prefix); - const duplicatedIcon = plugin.getDataPathByValue(iconNameWithPrefix); - if (!duplicatedIcon) { - removeIconFromIconPackDirectory(plugin, iconPackName, iconName); - } -}; -/** - * A utility function which will convert a string to a hexadecimal color. - * @param str String that will be converted to a hexadecimal color. - * @returns A string which is the hexadecimal color. - */ -const stringToHex = (str) => { - const validHex = str.replace(/[^0-9a-fA-F]/g, ''); - const hex = validHex.padStart(6, '0').substring(0, 6); - return `#${hex}`; -}; -/** - * A utility function which will check if a string is a hexadecimal color. - * @param str String that will be checked if it is a hexadecimal color. - * @param includeHash Boolean which will include the hash in the check. - * @returns A boolean which is true if the string is a hexadecimal color. - */ -const isHexadecimal = (str, includeHash = false) => { - const regex = new RegExp(`^${includeHash ? '#' : ''}[0-9A-Fa-f]{1,6}$`); - return regex.test(str); -}; - -// This library file does not include any other dependency and is a standalone file that -/** - * Sets the margin for a specific node. - * @param el Node where the margin will be set. - * @param margin Margin that will be applied to the node. - * @returns The modified node with the applied margin. - */ -const setMargin = (el, margin) => { - el.style.margin = `${margin.top}px ${margin.right}px ${margin.bottom}px ${margin.left}px`; - return el; -}; -/** - * Applies all stylings to the specified svg icon string and applies styling to the node - * (container). The styling to the specified element is only modified when it is an emoji - * or extra margin is defined in the settings. - * @param plugin Instance of the IconFolderPlugin. - * @param iconString SVG that will be used to apply the svg styles to. - * @param el Node for manipulating the style. - * @returns Icon svg string with the manipulate style attributes. - */ -const applyAll = (plugin, iconString, container) => { - iconString = svg.setFontSize(iconString, plugin.getSettings().fontSize); - container.style.color = plugin.getSettings().iconColor; - iconString = svg.colorize(iconString, plugin.getSettings().iconColor); - // Sets the margin of an element. - const margin = plugin.getSettings().extraMargin; - const normalizedMargin = { - top: margin.top !== undefined ? margin.top : 4, - right: margin.right !== undefined ? margin.right : 4, - left: margin.left !== undefined ? margin.left : 4, - bottom: margin.bottom !== undefined ? margin.bottom : 4, - }; - if (plugin.getSettings().extraMargin) { - setMargin(container, normalizedMargin); - } - if (emoji.isEmoji(iconString)) { - container.style.fontSize = `${plugin.getSettings().fontSize}px`; - container.style.lineHeight = `${plugin.getSettings().fontSize}px`; - } - return iconString; -}; -/** - * Refreshes all the styles of all the applied icons where a `.iconize-icon` - * class is defined. This function only modifies the styling of the node. - * @param plugin Instance of the IconFolderPlugin. - * @param applyStyles Function that is getting called when the icon node is found and - * typically applies all the styles to the icon. - */ -const refreshIconNodes = (plugin, applyStyles = applyAll) => { - const fileExplorers = plugin.app.workspace.getLeavesOfType('file-explorer'); - for (const fileExplorer of fileExplorers) { - Object.keys(plugin.getData()).forEach((path) => { - const fileItem = fileExplorer.view.fileItems[path]; - if (fileItem) { - const titleEl = getFileItemTitleEl(fileItem); - const iconNode = titleEl.querySelector('.iconize-icon'); - if (iconNode) { - const pathValue = plugin.getData()[path]; - const hasIndividualColor = typeof pathValue === 'object' && pathValue.iconColor; - iconNode.innerHTML = applyStyles(plugin, iconNode.innerHTML, iconNode); - if (hasIndividualColor) { - iconNode.style.color = pathValue.iconColor; - const colorizedInnerHtml = svg.colorize(iconNode.innerHTML, pathValue.iconColor); - iconNode.innerHTML = colorizedInnerHtml; - } - } - } - }); - } -}; -var style = { - applyAll, - setMargin, - refreshIconNodes, -}; - -/** - * Removes the `iconize-icon` icon node from the provided HTMLElement. - * @param el HTMLElement from which the icon node will be removed. - */ -const removeIconInNode = (el) => { - const iconNode = el.querySelector('.iconize-icon'); - if (!iconNode) { - return; - } - iconNode.remove(); -}; -/** - * Removes the 'iconize-icon' icon node from the HTMLElement corresponding - * to the specified file path. - * @param path File path for which the icon node will be removed. - */ -const removeIconInPath = (path, options) => { - var _a; - const node = (_a = options === null || options === void 0 ? void 0 : options.container) !== null && _a !== void 0 ? _a : document.querySelector(`[data-path="${path}"]`); - if (!node) { - logger.warn(`Element with data path not found (path: ${path})`); - return; - } - removeIconInNode(node); -}; -/** - * Sets an icon or emoji for an HTMLElement based on the specified icon name and color. - * The function manipulates the specified node inline. - * @param plugin Instance of the IconFolderPlugin. - * @param iconName Name of the icon or emoji to add. - * @param node HTMLElement to which the icon or emoji will be added. - * @param color Optional color of the icon to add. - */ -const setIconForNode = (plugin, iconName, node, color) => { - var _a; - // Gets the possible icon based on the icon name. - const iconNextIdentifier = nextIdentifier(iconName); - const possibleIcon = getSvgFromLoadedIcon(iconName.substring(0, iconNextIdentifier), iconName.substring(iconNextIdentifier)); - if (possibleIcon) { - // The icon is possibly not an emoji. - let iconContent = style.applyAll(plugin, possibleIcon, node); - if (color) { - node.style.color = color; - iconContent = svg.colorize(iconContent, color); - } - node.innerHTML = iconContent; - } - else { - const parsedEmoji = (_a = emoji.parseEmoji(plugin.getSettings().emojiStyle, iconName)) !== null && _a !== void 0 ? _a : iconName; - node.innerHTML = style.applyAll(plugin, parsedEmoji, node); - } - node.setAttribute('title', iconName); -}; -/** - * Creates an icon node for the specified path and inserts it to the DOM. - * @param plugin Instance of the IconFolderPlugin. - * @param path Path for which the icon node will be created. - * @param iconName Name of the icon or emoji to add. - * @param color Optional color of the icon to add. - */ -const createIconNode = (plugin, path, iconName, options) => { - var _a; - // Get the container from the provided options or try to find the node that has the - // path from the document itself. - const node = (_a = options === null || options === void 0 ? void 0 : options.container) !== null && _a !== void 0 ? _a : document.querySelector(`[data-path="${path}"]`); - if (!node) { - logger.warn(`Element with data path not found (path: ${path})`); - return; - } - // Get the folder or file title node. - let titleNode = node.querySelector('.nav-folder-title-content'); - if (!titleNode) { - titleNode = node.querySelector('.nav-file-title-content'); - if (!titleNode) { - logger.warn(`Element with title node not found (path: ${path})`); - return; - } - } - let iconNode = node.querySelector('.iconize-icon'); - // If the icon is already set in the path, we do not need to create a new div element. - if (iconNode) { - setIconForNode(plugin, iconName, iconNode, options === null || options === void 0 ? void 0 : options.color); - } - else { - // Creates a new icon node and inserts it to the DOM. - iconNode = document.createElement('div'); - iconNode.setAttribute(config.ICON_ATTRIBUTE_NAME, iconName); - iconNode.classList.add('iconize-icon'); - setIconForNode(plugin, iconName, iconNode, options === null || options === void 0 ? void 0 : options.color); - node.insertBefore(iconNode, titleNode); - } -}; -/** - * Checks if the element has an icon node by checking if the element has a child with the - * class `iconize-icon`. - * @param element HTMLElement which will be checked if it has an icon. - * @returns Boolean whether the element has an icon node or not. - */ -const doesElementHasIconNode = (element) => { - return element.querySelector('.iconize-icon') !== null; -}; -/** - * Gets the icon name of the element if it has an icon node. - * @param element HTMLElement parent which includes a node with the icon. - * @returns String with the icon name if the element has an icon, `undefined` otherwise. - */ -const getIconFromElement = (element) => { - const iconNode = element.querySelector('.iconize-icon'); - const existingIcon = iconNode === null || iconNode === void 0 ? void 0 : iconNode.getAttribute(config.ICON_ATTRIBUTE_NAME); - return existingIcon; -}; -const getIconNodeFromPath = (path) => { - var _a; - return (_a = document - .querySelector(`[data-path="${path}"]`)) === null || _a === void 0 ? void 0 : _a.querySelector('[data-icon]'); -}; -var dom = { - setIconForNode, - createIconNode, - doesElementHasIconNode, - getIconFromElement, - getIconNodeFromPath, - removeIconInNode, - removeIconInPath, -}; - -class IconsPickerModal extends obsidian.FuzzySuggestModal { - constructor(app, plugin, path) { - super(app); - this.renderIndex = 0; - this.plugin = plugin; - this.path = path; - this.limit = 150; - const pluginRecentltyUsedItems = [ - ...plugin.getSettings().recentlyUsedIcons, - ]; - this.recentlyUsedItems = new Set(pluginRecentltyUsedItems.reverse().filter((iconName) => { - return doesIconExists(iconName) || emoji.isEmoji(iconName); - })); - this.resultContainerEl.classList.add('iconize-modal'); - } - onOpen() { - super.onOpen(); - } - onClose() { - const { contentEl } = this; - contentEl.empty(); - } - getItemText(item) { - return `${item.name} (${item.prefix})`; - } - getItems() { - const iconKeys = []; - if (this.inputEl.value.length === 0) { - this.renderIndex = 0; - this.recentlyUsedItems.forEach((iconName) => { - if (emoji.isEmoji(iconName)) { - iconKeys.push({ - name: emoji.shortNames[iconName], - prefix: 'Emoji', - displayName: iconName, - iconPackName: null, - }); - return; - } - const nextLetter = nextIdentifier(iconName); - const iconPrefix = iconName.substring(0, nextLetter); - const iconPackName = getIconPackNameByPrefix(iconPrefix); - iconKeys.push({ - name: iconName.substring(nextLetter), - prefix: iconPrefix, - displayName: iconName, - iconPackName: iconPackName, - }); - }); - } - for (const icon of getAllLoadedIconNames()) { - iconKeys.push({ - name: icon.name, - prefix: icon.prefix, - displayName: icon.prefix + icon.name, - iconPackName: icon.iconPackName, - }); - } - Object.entries(emoji.shortNames).forEach(([unicode, shortName]) => { - iconKeys.push({ - name: shortName, - prefix: 'Emoji', - displayName: unicode, - iconPackName: null, - }); - iconKeys.push({ - name: unicode, - prefix: 'Emoji', - displayName: unicode, - iconPackName: null, - }); - }); - return iconKeys; - } - onChooseItem(item) { - var _a; - const iconNameWithPrefix = typeof item === 'object' ? item.displayName : item; - dom.createIconNode(this.plugin, this.path, iconNameWithPrefix); - (_a = this.onSelect) === null || _a === void 0 ? void 0 : _a.call(this, iconNameWithPrefix); - this.plugin.addFolderIcon(this.path, item); - // Extracts the icon file to the icon pack. - if (typeof item === 'object' && !emoji.isEmoji(iconNameWithPrefix)) { - saveIconToIconPack(this.plugin, iconNameWithPrefix); - } - this.plugin.notifyPlugins(); - } - renderSuggestion(item, el) { - super.renderSuggestion(item, el); - // if (getAllIconPacks().length === 0) { - // this.resultContainerEl.style.display = 'block'; - // this.resultContainerEl.innerHTML = '
    You need to create an icon pack.
    '; - // return; - // } - // Render subheadlines for modal. - if (this.recentlyUsedItems.size !== 0 && this.inputEl.value.length === 0) { - if (this.renderIndex === 0) { - const subheadline = this.resultContainerEl.createDiv(); - subheadline.classList.add('iconize-subheadline'); - subheadline.innerText = 'Recently used Icons:'; - this.resultContainerEl.prepend(subheadline); - } - else if (this.renderIndex === this.recentlyUsedItems.size - 1) { - const subheadline = this.resultContainerEl.createDiv(); - subheadline.classList.add('iconize-subheadline'); - subheadline.innerText = 'All Icons:'; - this.resultContainerEl.append(subheadline); - } - } - if (item.item.name !== 'default') { - if (item.item.prefix === 'Emoji') { - const displayName = emoji.parseEmoji(this.plugin.getSettings().emojiStyle, item.item.displayName); - if (!displayName) { - return; - } - el.innerHTML = `
    ${el.innerHTML}
    ${displayName}
    `; - } - else { - el.innerHTML = `
    ${el.innerHTML}
    ${getSvgFromLoadedIcon(item.item.prefix, item.item.name)}
    `; - } - } - this.renderIndex++; - } -} - -var IconInTitlePosition; -(function (IconInTitlePosition) { - IconInTitlePosition["Above"] = "above"; - IconInTitlePosition["Inline"] = "inline"; -})(IconInTitlePosition || (IconInTitlePosition = {})); -const DEFAULT_SETTINGS = { - migrated: 2, - iconPacksPath: '.obsidian/icons', - fontSize: 16, - emojiStyle: 'native', - iconColor: null, - recentlyUsedIcons: [], - recentlyUsedIconsSize: 5, - rules: [], - extraMargin: { - top: 0, - right: 4, - bottom: 0, - left: 0, - }, - iconInTabsEnabled: false, - iconInTitleEnabled: false, - iconInTitlePosition: IconInTitlePosition.Above, - iconInFrontmatterEnabled: false, - iconInFrontmatterFieldName: 'icon', - iconColorInFrontmatterFieldName: 'iconColor', - iconsBackgroundCheckEnabled: false, - iconsInNotesEnabled: true, - iconsInLinksEnabled: true, - iconIdentifier: ':', - debugMode: false, -}; - -function migrate$4(plugin) { - return __awaiter(this, void 0, void 0, function* () { - // Migration for new syncing mechanism. - if (plugin.getSettings().migrated === 1) { - new obsidian.Notice('Please delete your old icon packs and redownload your icon packs to use the new syncing mechanism.', 20000); - plugin.getSettings().migrated++; - } - }); -} - -function migrate$3(plugin) { - return __awaiter(this, void 0, void 0, function* () { - // Migration for new order functionality of custom rules. - if (plugin.getSettings().migrated === 2) { - // Sorting alphabetically was the default behavior before. - plugin - .getSettings() - .rules.sort((a, b) => a.rule.localeCompare(b.rule)) - .forEach((rule, i) => { - rule.order = i; - }); - plugin.getSettings().migrated++; - } - }); -} - -class IconCache { - constructor() { - this.cache = new Map(); - this.set = (path, result) => { - this.cache.set(path, result); - }; - this.invalidate = (path) => { - this.cache.delete(path); - }; - this.clear = () => { - this.cache.clear(); - }; - this.get = (path) => { - var _a; - return (_a = this.cache.get(path)) !== null && _a !== void 0 ? _a : null; - }; - this.doesRecordExist = (path) => { - return this.get(path) !== null; - }; - if (IconCache.instance) { - throw new Error('Error: Instantiation failed: Use `IconCache.getInstance()` instead of new.'); - } - IconCache.instance = this; - } -} -IconCache.instance = new IconCache(); -IconCache.getInstance = () => { - return IconCache.instance; -}; - -/** - * Checks if the file type is equal to the `for` property of the custom rule. - * @param rule CustomRule that will be checked. - * @param fileType CustomRuleFileType that will be checked. Can be either `file` or `folder`. - * @returns Boolean whether the custom rule `for` matches the file type or not. - */ -const doesMatchFileType = (rule, fileType) => { - return (rule.for === 'everything' || - (rule.for === 'files' && fileType === 'file') || - (rule.for === 'folders' && fileType === 'folder')); -}; -/** - * Determines whether a given file or folder matches a specified custom rule. - * @param plugin Plugin instance. - * @param rule CustomRule to check against the file or folder. - * @param file TAbstractFile to check against the custom rule. - * @returns Promise that resolves to `true` if the file matches the rule, `false` otherwise. - */ -const isApplicable = (plugin, rule, file) => __awaiter(void 0, void 0, void 0, function* () { - const metadata = yield plugin.app.vault.adapter.stat(file.path); - if (!metadata) { - return false; - } - const fileType = metadata.type; - const doesMatch = doesMatchFileType(rule, fileType); - if (!doesMatch) { - return false; - } - return doesMatchPath(rule, file.path); -}); -/** - * Removes the icon from the custom rule from all the files and folders, if applicable. - * @param plugin IconFolderPlugin instance. - * @param rule CustomRule where the icons will be removed based on this rule. - */ -const removeFromAllFiles = (plugin, rule) => __awaiter(void 0, void 0, void 0, function* () { - const nodesWithIcon = document.querySelectorAll(`[${config.ICON_ATTRIBUTE_NAME}="${rule.icon}"]`); - for (let i = 0; i < nodesWithIcon.length; i++) { - const node = nodesWithIcon[i]; - // Parent element is the node which contains the data path. - const parent = node.parentElement; - if (!parent) { - continue; - } - const dataPath = parent.getAttribute('data-path'); - if (!dataPath) { - continue; - } - const fileType = (yield plugin.app.vault.adapter.stat(dataPath)).type; - if (doesMatchPath(rule, dataPath) && doesMatchFileType(rule, fileType)) { - dom.removeIconInNode(parent); - IconCache.getInstance().invalidate(dataPath); - } - } -}); -/** - * Gets all the custom rules sorted by their order property in ascending order. - * @param plugin IconFolderPlugin instance. - * @returns CustomRule array sorted by their order property in ascending order. - */ -const getSortedRules = (plugin) => { - return plugin.getSettings().rules.sort((a, b) => a.order - b.order); -}; -/** - * Tries to add all specific custom rule icons to all registered files and directories. - * It does that by calling the {@link add} function. Custom rules should have the lowest - * priority and will get ignored if an icon already exists in the file or directory. - * @param plugin IconFolderPlugin instance. - * @param rule CustomRule that will be applied, if applicable, to all files and folders. - */ -const addToAllFiles = (plugin, rule) => __awaiter(void 0, void 0, void 0, function* () { - const fileItems = yield getFileItems(plugin, rule); - for (const fileItem of fileItems) { - yield add$2(plugin, rule, fileItem.file, getFileItemTitleEl(fileItem)); - } -}); -/** - * Tries to add the icon of the custom rule to a file or folder. This function also checks - * if the file type matches the `for` property of the custom rule. - * @param plugin IconFolderPlugin instance. - * @param rule CustomRule that will be used to check if the rule is applicable to the file - * or directory. - * @param file TAbstractFile that will be used to possibly create the icon for. - * @param container HTMLElement where the icon will be added if the custom rules matches. - * @returns A promise that resolves to `true` if the icon was added, `false` otherwise. - */ -const add$2 = (plugin, rule, file, container) => __awaiter(void 0, void 0, void 0, function* () { - if (container && dom.doesElementHasIconNode(container)) { - return false; - } - // Checks if the file or directory already has an icon. - const hasIcon = plugin.getIconNameFromPath(file.path); - if (hasIcon) { - return false; - } - const doesMatch = yield isApplicable(plugin, rule, file); - if (doesMatch) { - IconCache.getInstance().set(file.path, { - iconNameWithPrefix: rule.icon, - inCustomRule: true, - }); - dom.createIconNode(plugin, file.path, rule.icon, { - color: rule.color, - container, - }); - return true; - } - return false; -}); -/** - * Determines whether a given rule exists in a given path. - * @param rule Rule to check for. - * @param path Path to check in. - * @returns True if the rule exists in the path, false otherwise. - */ -const doesMatchPath = (rule, path) => { - const toMatch = rule.useFilePath ? path : path.split('/').pop(); - try { - // Rule is in some sort of regex. - const regex = new RegExp(rule.rule); - if (toMatch.match(regex)) { - return true; - } - } - catch (_a) { - // Rule is not in some sort of regex, check for basic string match. - return toMatch.includes(rule.rule); - } - return false; -}; -/** - * Gets all the file items that can be applied to the specific custom rule. - * @param plugin Instance of IconFolderPlugin. - * @param rule Custom rule that will be checked for. - * @returns A promise that resolves to an array of file items that match the custom rule. - */ -const getFileItems = (plugin, rule) => __awaiter(void 0, void 0, void 0, function* () { - const result = []; - for (const fileExplorer of plugin.getRegisteredFileExplorers()) { - const files = Object.values(fileExplorer.fileItems); - for (const fileItem of files) { - if (yield isApplicable(plugin, rule, fileItem.file)) { - result.push(fileItem); - } - } - } - return result; -}); -var customRule = { - getFileItems, - doesMatchPath, - doesMatchFileType, - getSortedRules, - removeFromAllFiles, - add: add$2, - addToAllFiles, - isApplicable, -}; - -function migrate$2(plugin) { - return __awaiter(this, void 0, void 0, function* () { - // Migration for inheritance to custom rule. - if (plugin.getSettings().migrated === 3) { - let hasRemovedInheritance = false; - for (const [key, value] of Object.entries(plugin.getData())) { - if (key === 'settings' || typeof value !== 'object') { - continue; - } - const folderData = value; - const inheritanceIcon = folderData.inheritanceIcon; - if (!inheritanceIcon) { - continue; - } - const folderIconName = folderData.iconName; - // Clean up old data. - if (folderData.iconColor && folderIconName) { - delete folderData.inheritanceIcon; - } - else if (folderIconName) { - delete plugin.getData()[key]; - plugin.getData()[key] = folderIconName; - } - else if (!folderIconName) { - delete plugin.getData()[key]; - } - const folderPath = key + '\\/[\\w\\d\\s]+'; - const newRule = { - icon: inheritanceIcon, - rule: `${folderPath}\\.(?:\\w+\\.)*\\w+`, - for: 'files', - order: 0, - useFilePath: true, - }; - // Reorder existing custom rules so that the new inheritance custom rule - // is at the top. - plugin.getSettings().rules.map((rule) => { - rule.order++; - }); - plugin.getSettings().rules.unshift(newRule); - // Apply the custom rule. - yield customRule.addToAllFiles(plugin, newRule); - hasRemovedInheritance = true; - } - if (hasRemovedInheritance) { - new obsidian.Notice(`[${config.PLUGIN_NAME}] Inheritance has been removed and replaced with custom rules.`); - } - plugin.getSettings().migrated++; - } - }); -} - -function migrate$1(plugin) { - return __awaiter(this, void 0, void 0, function* () { - if (plugin.getSettings().migrated === 4) { - if (plugin.getSettings().emojiStyle === 'none') { - plugin.getSettings().emojiStyle = 'native'; - } - plugin.getSettings().migrated++; - } - }); -} - -const migrate = (plugin) => __awaiter(void 0, void 0, void 0, function* () { - // eslint-disable-next-line - // @ts-ignore - Required because an older version of the plugin saved the `migrated` - // property as a boolean instead of a number. - if (plugin.getSettings().migrated === true) { - plugin.getSettings().migrated = 1; - } - yield migrate$4(plugin); - yield migrate$3(plugin); - yield migrate$2(plugin); - yield migrate$1(plugin); - yield plugin.saveIconFolderData(); -}); - -class IconFolderSetting { - constructor(plugin, containerEl) { - this.plugin = plugin; - this.containerEl = containerEl; - } -} - -class CustomIconPackSetting extends IconFolderSetting { - constructor(plugin, containerEl, refreshDisplay) { - super(plugin, containerEl); - this.refreshDisplay = refreshDisplay; - this.dragOverElement = document.createElement('div'); - this.dragOverElement.addClass('iconize-dragover-el'); - this.dragOverElement.style.display = 'hidden'; - this.dragOverElement.innerHTML = '

    Drop to add icon.

    '; - } - normalizeIconPackName(value) { - return value.toLowerCase().replace(/\s/g, '-'); - } - preventDefaults(event) { - event.preventDefault(); - event.stopPropagation(); - } - highlight(el) { - clearTimeout(this.closeTimer); - if (!this.dragTargetElement) { - el.appendChild(this.dragOverElement); - el.classList.add('iconize-dragover'); - this.dragTargetElement = el; - } - } - unhighlight(target, el) { - if (this.dragTargetElement && this.dragTargetElement !== target) { - this.dragTargetElement.removeChild(this.dragOverElement); - this.dragTargetElement.classList.remove('iconize-dragover'); - this.dragTargetElement = undefined; - } - clearTimeout(this.closeTimer); - this.closeTimer = setTimeout(() => { - if (this.dragTargetElement) { - el.removeChild(this.dragOverElement); - el.classList.remove('iconize-dragover'); - this.dragTargetElement = undefined; - } - }, 100); - } - display() { - new obsidian.Setting(this.containerEl) - .setName('Add custom icon pack') - .setDesc('Add a custom icon pack.') - .addText((text) => { - text.setPlaceholder('Your icon pack name'); - this.textComponent = text; - }) - .addButton((btn) => { - btn.setButtonText('Add icon pack'); - btn.onClick(() => __awaiter(this, void 0, void 0, function* () { - const name = this.textComponent.getValue(); - if (name.length === 0) { - return; - } - const normalizedName = this.normalizeIconPackName(this.textComponent.getValue()); - if (yield doesIconPackExist(this.plugin, normalizedName)) { - new obsidian.Notice('Icon pack already exists.'); - return; - } - yield createCustomIconPackDirectory(this.plugin, normalizedName); - this.textComponent.setValue(''); - this.refreshDisplay(); - new obsidian.Notice('Icon pack successfully created.'); - })); - }); - getAllIconPacks().forEach((iconPack) => { - const iconPackSetting = new obsidian.Setting(this.containerEl) - .setName(`${iconPack.name} (${iconPack.prefix})`) - .setDesc(`Total icons: ${iconPack.icons.length}`); - // iconPackSetting.addButton((btn) => { - // btn.setIcon('broken-link'); - // btn.setTooltip('Try to fix icon pack'); - // btn.onClick(async () => { - // new Notice('Try to fix icon pack...'); - // getIconPack(iconPack.name).icons = []; - // const icons = await getFilesInDirectory(this.plugin, `${getPath()}/${iconPack.name}`); - // for (let i = 0; i < icons.length; i++) { - // const filePath = icons[i]; - // const fileName = filePath.split('/').pop(); - // const file = await this.plugin.app.vault.adapter.read(filePath); - // const iconContent = file - // .replace(/stroke="#fff"/g, 'stroke="currentColor"') - // .replace(/fill="#fff"/g, 'fill="currentColor"'); - // await this.plugin.app.vault.adapter.write(filePath, iconContent); - // await normalizeFileName(this.plugin, filePath); - // addIconToIconPack(iconPack.name, fileName, iconContent); - // } - // new Notice('...tried to fix icon pack'); - // // Refreshes the DOM. - // Object.entries(this.plugin.getData()).forEach(async ([k, v]) => { - // const doesPathExist = await this.plugin.app.vault.adapter.exists(k, true); - // if (doesPathExist && typeof v === 'string') { - // // dom.removeIconInPath(k); - // dom.createIconNode(this.plugin, k, v); - // } - // }); - // }); - // }); - iconPackSetting.addButton((btn) => { - btn.setIcon('plus'); - btn.setTooltip('Add an icon'); - btn.onClick(() => __awaiter(this, void 0, void 0, function* () { - const fileSelector = document.createElement('input'); - fileSelector.setAttribute('type', 'file'); - fileSelector.setAttribute('multiple', 'multiple'); - fileSelector.setAttribute('accept', '.svg'); - fileSelector.click(); - fileSelector.onchange = (e) => __awaiter(this, void 0, void 0, function* () { - const target = e.target; - for (let i = 0; i < target.files.length; i++) { - const file = target.files[i]; - const content = yield readFileSync(file); - yield createFile(this.plugin, iconPack.name, file.name, content); - addIconToIconPack(iconPack.name, file.name, content); - iconPackSetting.setDesc(`Total icons: ${iconPack.icons.length} (added: ${file.name})`); - } - new obsidian.Notice('Icons successfully added.'); - }); - })); - }); - iconPackSetting.addButton((btn) => { - btn.setIcon('trash'); - btn.setTooltip('Remove the icon pack'); - btn.onClick(() => __awaiter(this, void 0, void 0, function* () { - yield deleteIconPack(this.plugin, iconPack.name); - this.refreshDisplay(); - new obsidian.Notice('Icon pack successfully deleted.'); - })); - }); - ['dragenter', 'dragover', 'dragleave', 'drop'].forEach((event) => { - iconPackSetting.settingEl.addEventListener(event, this.preventDefaults, false); - }); - ['dragenter', 'dragover'].forEach((event) => { - iconPackSetting.settingEl.addEventListener(event, () => this.highlight(iconPackSetting.settingEl), false); - }); - ['dragleave', 'drop'].forEach((event) => { - iconPackSetting.settingEl.addEventListener(event, (event) => this.unhighlight(event.currentTarget, iconPackSetting.settingEl), false); - }); - iconPackSetting.settingEl.addEventListener('drop', (event) => __awaiter(this, void 0, void 0, function* () { - const files = event.dataTransfer.files; - let successful = false; - for (let i = 0; i < files.length; i++) { - const file = files[i]; - if (file.type !== 'image/svg+xml') { - new obsidian.Notice(`File ${file.name} is not a SVG file.`); - continue; - } - successful = true; - const content = yield readFileSync(file); - yield createFile(this.plugin, iconPack.name, file.name, content); - addIconToIconPack(iconPack.name, file.name, content); - iconPackSetting.setDesc(`Total icons: ${iconPack.icons.length} (added: ${file.name})`); - } - if (successful) { - new obsidian.Notice('Icons successfully added.'); - } - }), false); - }); - } -} - -/** - * Gets the tab leaves of a specific file path by looping through all opened files and - * checking if the file path matches. - * @param plugin IconFolderPlugin instance. - * @param path String of the file path to get the tab leaf of. - * @returns TabHeaderLeaf array that includes all tab leaves of the file path. - */ -const getTabLeavesOfFilePath = (plugin, path) => { - const openedFiles = getAllOpenedFiles(plugin); - const openedFile = openedFiles.filter((openedFile) => openedFile.path === path); - const leaves = openedFile.map((openedFile) => openedFile.leaf); - return leaves; -}; -/** - * Adds an icon to the tab and its container. This function respects the - * custom rules and individually icon set. - * @param plugin IconFolderPlugin instance. - * @param file TFile instance of the file to add the icon to. - * @param iconContainer HTMLElement where the icon will be added to. - * @param options AddOptions for the add function which can optionally be used. - */ -const add$1 = (plugin, file, iconContainer, options) => __awaiter(void 0, void 0, void 0, function* () { - var _a; - const iconColor = (_a = options === null || options === void 0 ? void 0 : options.iconColor) !== null && _a !== void 0 ? _a : plugin.getSettings().iconColor; - const data = Object.entries(plugin.getData()); - // Removes the `display: none` from the obsidian styling. - iconContainer.style.display = 'flex'; - // Only add the icon name manually when it is defined in the options. - if (options === null || options === void 0 ? void 0 : options.iconName) { - dom.setIconForNode(plugin, options.iconName, iconContainer, iconColor); - // TODO: Refactor to include option to `insertIconToNode` function. - iconContainer.style.margin = null; - return; - } - // Add icons to tabs if a custom rule is applicable. - for (const rule of customRule.getSortedRules(plugin)) { - const isApplicable = yield customRule.isApplicable(plugin, rule, file); - if (isApplicable) { - dom.setIconForNode(plugin, rule.icon, iconContainer, rule.color); - // TODO: Refactor to include option to `insertIconToNode` function. - iconContainer.style.margin = null; - break; - } - } - // Add icons to tabs if there is an icon set. - const iconData = data.find(([dataPath]) => dataPath === file.path); - if (!iconData) { - return; - } - const value = iconData[1]; - if (typeof value !== 'string' && typeof value !== 'object') { - return; - } - let iconName; - if (typeof value === 'object') { - const v = value; - if (v.iconName === null) { - return; - } - iconName = v.iconName; - } - else { - iconName = value; - } - dom.setIconForNode(plugin, iconName, iconContainer, iconColor); - // TODO: Refactor to include option to `insertIconToNode` function. - iconContainer.style.margin = null; -}); -/** - * Updates the icon in the tab and container by setting calling the `setIconForNode` - * function and removing the margin from the icon container. - * @param plugin IconFolderPlugin instance. - * @param iconName String of the icon name to update to. - * @param iconContainer HTMLElement where the icon is located and will be updated. - */ -const update = (plugin, iconName, iconContainer) => { - dom.setIconForNode(plugin, iconName, iconContainer); - // TODO: Refactor to include option to `insertIconToNode` function. - iconContainer.style.margin = null; -}; -/** - * Removes the icon from the tab and container by setting the `display` style property - * to `none`. Optionally, the icon can be replaced with the default obsidian icon. - * @param iconContainer HTMLElement where the icon is located and will be removed from. - * @param options RemoveOptions for the remove function which can optionally be used. - */ -const remove$1 = (iconContainer, options) => { - if (!(options === null || options === void 0 ? void 0 : options.replaceWithDefaultIcon)) { - // Removes the display of the icon container to remove the icons from the tabs. - iconContainer.style.display = 'none'; - } - else { - iconContainer.innerHTML = DEFAULT_FILE_ICON; - } -}; -var iconTabs = { - add: add$1, - update, - remove: remove$1, - getTabLeavesOfFilePath, -}; - -class CustomIconRuleSetting extends IconFolderSetting { - constructor(plugin, containerEl, app, refreshDisplay) { - super(plugin, containerEl); - this.app = app; - this.refreshDisplay = refreshDisplay; - } - /** - * Updates all the open files based on the custom rule that was specified. - * @param rule Rule that will be used to update all the icons for all opened files. - * @param remove Whether to remove the icons that are applicable to the rule or not. - */ - updateIconTabs(rule_1, remove_1) { - return __awaiter(this, arguments, void 0, function* (rule, remove, cachedPaths = []) { - if (this.plugin.getSettings().iconInTabsEnabled) { - for (const openedFile of getAllOpenedFiles(this.plugin)) { - if (cachedPaths.includes(openedFile.path)) { - continue; - } - const applicable = yield customRule.isApplicable(this.plugin, rule, openedFile); - if (!applicable) { - continue; - } - const leaf = openedFile.leaf; - if (remove) { - iconTabs.remove(leaf.tabHeaderInnerIconEl, { - replaceWithDefaultIcon: true, - }); - } - else { - iconTabs.add(this.plugin, openedFile, leaf.tabHeaderInnerIconEl, { - iconName: rule.icon, - iconColor: rule.color, - }); - } - } - } - }); - } - createDescriptionEl(container, text) { - const description = container.createEl('p', { - text, - cls: 'setting-item-description', - }); - description.style.marginBottom = 'var(--size-2-2)'; - } - display() { - new obsidian.Setting(this.containerEl) - .setName('Add icon rule') - .setDesc('Will add the icon based on the defined rule (as a plain string or in regex format).') - .addText((text) => { - text.onChange((value) => { - this.chooseIconBtn.setDisabled(value.length === 0); - this.chooseIconBtn.buttonEl.style.cursor = - value.length === 0 ? 'not-allowed' : 'default'; - this.chooseIconBtn.buttonEl.style.opacity = - value.length === 0 ? '50%' : '100%'; - }); - text.setPlaceholder('regex or simple string'); - this.textComponent = text; - }) - .addButton((btn) => { - btn.setDisabled(true); - btn.setButtonText('Choose icon'); - btn.onClick(() => __awaiter(this, void 0, void 0, function* () { - if (this.textComponent.getValue().length === 0) { - return; - } - const modal = new IconsPickerModal(this.app, this.plugin, ''); - modal.onChooseItem = (item) => __awaiter(this, void 0, void 0, function* () { - const icon = getNormalizedName(typeof item === 'object' ? item.displayName : item); - const rule = { - rule: this.textComponent.getValue(), - icon, - for: 'everything', - order: this.plugin.getSettings().rules.length, - }; - this.plugin.getSettings().rules = [ - ...this.plugin.getSettings().rules, - rule, - ]; - yield this.plugin.saveIconFolderData(); - this.refreshDisplay(); - new obsidian.Notice('Icon rule added.'); - this.textComponent.setValue(''); - saveIconToIconPack(this.plugin, rule.icon); - yield customRule.addToAllFiles(this.plugin, rule); - this.updateIconTabs(rule, false); - }); - modal.open(); - })); - this.chooseIconBtn = btn; - }); - this.plugin.getSettings().rules.forEach((rule) => { - // Keeping track of the old rule so that we can get a reference to it for old values. - const oldRule = Object.assign({}, rule); - const settingRuleEl = new obsidian.Setting(this.containerEl) - .setName(rule.rule) - .setDesc(`Icon: ${rule.icon}`); - const currentOrder = rule.order; - /** - * Re-orders the custom rule based on the value that is passed in. - * @param valueForReorder Number that will be used to determine whether to swap the - * custom rule with the next rule or the previous rule. - */ - const orderCustomRules = (valueForReorder) => __awaiter(this, void 0, void 0, function* () { - const otherRule = this.plugin.getSettings().rules[currentOrder + valueForReorder]; - // Swap the current rule with the next rule. - otherRule.order = otherRule.order - valueForReorder; - rule.order = currentOrder + valueForReorder; - // Refreshes the DOM. - yield customRule.removeFromAllFiles(this.plugin, oldRule); - yield this.plugin.saveIconFolderData(); - const addedPaths = []; - for (const fileExplorer of this.plugin.getRegisteredFileExplorers()) { - const files = Object.values(fileExplorer.fileItems); - for (const rule of customRule.getSortedRules(this.plugin)) { - // Removes the icon tabs from all opened files. - this.updateIconTabs(rule, true, addedPaths); - // Adds the icon tabs to all opened files. - this.updateIconTabs(rule, false, addedPaths); - for (const fileItem of files) { - if (addedPaths.includes(fileItem.file.path)) { - continue; - } - const added = yield customRule.add(this.plugin, rule, fileItem.file, getFileItemTitleEl(fileItem)); - if (added) { - addedPaths.push(fileItem.file.path); - } - } - } - } - this.refreshDisplay(); - }); - // Add the move down custom rule button to re-order the custom rule. - settingRuleEl.addExtraButton((btn) => { - const isFirstOrder = currentOrder === 0; - btn.setDisabled(isFirstOrder); - btn.extraSettingsEl.style.cursor = isFirstOrder - ? 'not-allowed' - : 'default'; - btn.extraSettingsEl.style.opacity = isFirstOrder ? '50%' : '100%'; - btn.setIcon('arrow-up'); - btn.setTooltip('Prioritize the custom rule'); - btn.onClick(() => __awaiter(this, void 0, void 0, function* () { - yield orderCustomRules(-1); - })); - }); - // Add the move up custom rule button to re-order the custom rule. - settingRuleEl.addExtraButton((btn) => { - const isLastOrder = currentOrder === this.plugin.getSettings().rules.length - 1; - btn.setDisabled(isLastOrder); - btn.extraSettingsEl.style.cursor = isLastOrder - ? 'not-allowed' - : 'default'; - btn.extraSettingsEl.style.opacity = isLastOrder ? '50%' : '100%'; - btn.setIcon('arrow-down'); - btn.setTooltip('Deprioritize the custom rule'); - btn.onClick(() => __awaiter(this, void 0, void 0, function* () { - yield orderCustomRules(1); - })); - }); - // Add the edit custom rule button. - settingRuleEl.addButton((btn) => { - btn.setIcon('pencil'); - btn.setTooltip('Edit the custom rule'); - btn.onClick(() => { - var _a, _b; - // Create modal and its children elements. - const modal = new obsidian.Modal(this.plugin.app); - modal.contentEl.style.display = 'block'; - modal.modalEl.classList.add('iconize-custom-modal'); - modal.titleEl.setText('Edit custom rule'); - // Create the input for the rule. - this.createDescriptionEl(modal.contentEl, 'Regex or simple string'); - const input = new obsidian.TextComponent(modal.contentEl); - input.setValue(rule.rule); - input.onChange((value) => __awaiter(this, void 0, void 0, function* () { - rule.rule = value; - })); - const useFilePathContainer = modal.contentEl.createDiv(); - useFilePathContainer.style.display = 'flex'; - useFilePathContainer.style.alignItems = 'center'; - useFilePathContainer.style.justifyContent = 'space-between'; - useFilePathContainer.style.marginTop = 'var(--size-4-5)'; - const useFilePathDescription = useFilePathContainer.createEl('p', { - text: 'Include folders and files that are part of the path.', - cls: 'setting-item-description', - }); - useFilePathDescription.style.margin = '0'; - useFilePathDescription.style.marginBottom = 'var(--size-2-2)'; - new obsidian.ToggleComponent(useFilePathContainer) - .setValue(rule.useFilePath === true) - .onChange((value) => { - rule.useFilePath = value; - }); - // Create the toggle for changing the rule type. - const ruleTypeContainer = modal.contentEl.createDiv(); - ruleTypeContainer.style.display = 'flex'; - ruleTypeContainer.style.alignItems = 'center'; - ruleTypeContainer.style.justifyContent = 'space-between'; - ruleTypeContainer.style.marginTop = 'var(--size-4-5)'; - const ruleTypeDescription = ruleTypeContainer.createEl('p', { - text: 'Where the custom rule gets applied to.', - cls: 'setting-item-description', - }); - ruleTypeDescription.style.margin = '0'; - ruleTypeDescription.style.marginBottom = 'var(--size-2-2)'; - const ruleTypeButton = new obsidian.ButtonComponent(ruleTypeContainer); - const setButtonContent = (isFor) => { - if (isFor === 'folders') { - ruleTypeButton.setIcon('folder'); - } - else if (isFor === 'files') { - ruleTypeButton.setIcon('document'); - } - else { - ruleTypeButton.setIcon('documents'); - } - ruleTypeButton.setTooltip(`Icon applicable to: ${isFor}`); - }; - setButtonContent((_a = rule.for) !== null && _a !== void 0 ? _a : 'everything'); - ruleTypeButton.onClick(() => __awaiter(this, void 0, void 0, function* () { - var _c; - const isFor = (_c = rule.for) !== null && _c !== void 0 ? _c : 'everything'; - this.updateIconTabs(rule, true); - yield customRule.removeFromAllFiles(this.plugin, Object.assign(Object.assign({}, rule), { for: isFor })); - if (isFor === 'folders') { - rule.for = 'everything'; - } - else if (isFor === 'files') { - rule.for = 'folders'; - } - else { - rule.for = 'files'; - } - setButtonContent(rule.for); - })); - // Create the change icon button with icon preview. - this.createDescriptionEl(modal.contentEl, 'Custom rule icon'); - const iconContainer = modal.contentEl.createDiv(); - iconContainer.style.display = 'flex'; - iconContainer.style.alignItems = 'center'; - iconContainer.style.justifyContent = 'space-between'; - const iconEl = iconContainer.createDiv(); - const iconPreviewEl = iconEl.createDiv(); - dom.setIconForNode(this.plugin, rule.icon, iconPreviewEl); - iconEl.style.display = 'flex'; - iconEl.style.alignItems = 'center'; - iconEl.style.justifyContent = 'space-between'; - iconEl.style.margin = null; - iconPreviewEl.innerHTML = svg.setFontSize(iconPreviewEl.innerHTML, 20); - const iconNameEl = iconEl.createEl('div', { - cls: 'setting-item-description', - }); - iconNameEl.style.paddingTop = '0'; - iconNameEl.style.marginLeft = 'var(--size-2-2)'; - iconNameEl.innerText = rule.icon; - const changeIconBtn = new obsidian.ButtonComponent(iconContainer); - changeIconBtn.setButtonText('Change icon'); - changeIconBtn.onClick(() => __awaiter(this, void 0, void 0, function* () { - const modal = new IconsPickerModal(this.app, this.plugin, rule.icon); - modal.onChooseItem = (item) => __awaiter(this, void 0, void 0, function* () { - const icon = typeof item === 'object' ? item.displayName : item; - rule.icon = icon; - dom.setIconForNode(this.plugin, rule.icon, iconPreviewEl); - iconPreviewEl.innerHTML = svg.setFontSize(iconPreviewEl.innerHTML, 20); - iconNameEl.innerText = getNormalizedName(rule.icon); - }); - modal.open(); - })); - // Create the color picker for the rule. - this.createDescriptionEl(modal.contentEl, 'Color of the icon'); - const colorContainer = modal.contentEl.createDiv(); - colorContainer.style.display = 'flex'; - colorContainer.style.alignItems = 'center'; - colorContainer.style.justifyContent = 'space-between'; - const colorPicker = new obsidian.ColorComponent(colorContainer) - .setValue((_b = rule.color) !== null && _b !== void 0 ? _b : '#000000') - .onChange((value) => { - rule.color = value; - }); - const defaultColorButton = new obsidian.ButtonComponent(colorContainer); - defaultColorButton.setTooltip('Set color to the default one'); - defaultColorButton.setButtonText('Default'); - defaultColorButton.onClick(() => { - colorPicker.setValue('#000000'); - rule.color = undefined; - }); - // Create the save button. - const button = new obsidian.ButtonComponent(modal.contentEl); - button.buttonEl.style.marginTop = 'var(--size-4-4)'; - button.buttonEl.style.float = 'right'; - button.setButtonText('Save Changes'); - button.onClick(() => __awaiter(this, void 0, void 0, function* () { - if (!emoji.isEmoji(oldRule.icon)) { - // Tries to remove the previously used icon from the icon pack. - removeIconFromIconPack(this.plugin, oldRule.icon); - } - if (!emoji.isEmoji(rule.icon)) { - // Tries to add the newly used icon to the icon pack. - saveIconToIconPack(this.plugin, rule.icon); - rule.icon = getNormalizedName(rule.icon); - } - this.refreshDisplay(); - new obsidian.Notice('Custom rule updated.'); - // Refresh the DOM. - yield customRule.removeFromAllFiles(this.plugin, oldRule); - this.updateIconTabs(rule, true); - this.plugin.getSettings().rules.forEach((rule) => __awaiter(this, void 0, void 0, function* () { - yield customRule.addToAllFiles(this.plugin, rule); - this.updateIconTabs(rule, false); - })); - yield this.plugin.saveIconFolderData(); - modal.close(); - })); - modal.open(); - }); - }); - // Add the delete custom rule button. - settingRuleEl.addButton((btn) => { - btn.setIcon('trash'); - btn.setTooltip('Remove the custom rule'); - btn.onClick(() => __awaiter(this, void 0, void 0, function* () { - const newRules = this.plugin - .getSettings() - .rules.filter((r) => rule.rule !== r.rule || - rule.color !== r.color || - rule.icon !== r.icon || - rule.for !== r.for); - this.plugin.getSettings().rules = newRules; - yield this.plugin.saveIconFolderData(); - this.refreshDisplay(); - new obsidian.Notice('Custom rule deleted.'); - yield customRule.removeFromAllFiles(this.plugin, rule); - removeIconFromIconPack(this.plugin, rule.icon); - this.updateIconTabs(rule, true); - const previousRules = this.plugin - .getSettings() - .rules.filter((r) => rule.for === r.for); - previousRules.forEach((previousRule) => __awaiter(this, void 0, void 0, function* () { - yield customRule.addToAllFiles(this.plugin, previousRule); - this.updateIconTabs(previousRule, false); - })); - })); - }); - }); - } -} - -const getTitleIcon = (leaf) => { - return leaf.querySelector(`.${config.TITLE_ICON_CLASS}`); -}; -const add = (plugin, inlineTitleEl, svgElement, options) => { - var _a; - if (!inlineTitleEl.parentElement) { - return; - } - if (options === null || options === void 0 ? void 0 : options.fontSize) { - svgElement = svg.setFontSize(svgElement, options.fontSize); - } - let titleIcon = getTitleIcon(inlineTitleEl.parentElement); - if (!titleIcon) { - titleIcon = document.createElement('div'); - } - const isInline = plugin.getSettings().iconInTitlePosition === IconInTitlePosition.Inline; - if (isInline) { - titleIcon.style.display = 'inline-block'; - titleIcon.style.removeProperty('margin-inline'); - titleIcon.style.removeProperty('width'); - } - else { - titleIcon.style.display = 'block'; - titleIcon.style.width = 'var(--line-width)'; - titleIcon.style.marginInline = '0'; - } - titleIcon.classList.add(config.TITLE_ICON_CLASS); - // Checks if the passed element is an emoji. - if (emoji.isEmoji(svgElement) && options.fontSize) { - svgElement = - (_a = emoji.parseEmoji(plugin.getSettings().emojiStyle, svgElement, options.fontSize)) !== null && _a !== void 0 ? _a : svgElement; - titleIcon.style.fontSize = `${options.fontSize}px`; - } - titleIcon.innerHTML = svgElement; - let wrapperElement = inlineTitleEl.parentElement; - // Checks the parent and selects the correct wrapper element. - // This should only happen in the beginning. - if (wrapperElement && - !wrapperElement.classList.contains(config.INLINE_TITLE_WRAPPER_CLASS)) { - wrapperElement = wrapperElement.querySelector(`.${config.INLINE_TITLE_WRAPPER_CLASS}`); - } - // Whenever there is no correct wrapper element, we create one. - if (!wrapperElement) { - wrapperElement = inlineTitleEl.parentElement.createDiv(); - wrapperElement.classList.add(config.INLINE_TITLE_WRAPPER_CLASS); - } - // Avoiding adding the same nodes together when changing the title. - if (wrapperElement !== inlineTitleEl.parentElement) { - inlineTitleEl.parentElement.prepend(wrapperElement); - } - if (isInline) { - wrapperElement.style.display = 'flex'; - wrapperElement.style.alignItems = 'flex-start'; - if (emoji.isEmoji(svgElement)) { - titleIcon.style.transform = 'translateY(-9%)'; - } - else { - titleIcon.style.transform = 'translateY(9%)'; - } - } - else { - wrapperElement.style.display = 'block'; - titleIcon.style.transform = 'translateY(9%)'; - } - wrapperElement.append(titleIcon); - wrapperElement.append(inlineTitleEl); -}; -const updateStyle = (inlineTitleEl, options) => { - if (!inlineTitleEl.parentElement) { - return; - } - const titleIcon = getTitleIcon(inlineTitleEl.parentElement); - if (!titleIcon) { - return; - } - if (options.fontSize) { - if (!emoji.isEmoji(titleIcon.innerHTML)) { - titleIcon.innerHTML = svg.setFontSize(titleIcon.innerHTML, options.fontSize); - } - else { - titleIcon.style.fontSize = `${options.fontSize}px`; - } - } -}; -/** - * Hides the title icon from the provided HTMLElement. - * @param contentEl HTMLElement to hide the title icon from. - */ -const hide = (inlineTitleEl) => { - if (!inlineTitleEl.parentElement) { - return; - } - const titleIconContainer = getTitleIcon(inlineTitleEl.parentElement); - if (!titleIconContainer) { - return; - } - titleIconContainer.style.display = 'none'; -}; -const remove = (inlineTitleEl) => { - if (!inlineTitleEl.parentElement) { - return; - } - const titleIconContainer = getTitleIcon(inlineTitleEl.parentElement); - if (!titleIconContainer) { - return; - } - titleIconContainer.remove(); -}; -var titleIcon = { - add, - updateStyle, - hide, - remove, -}; - -const calculateFontTextSize = () => { - var _a; - let fontSize = parseFloat((_a = getComputedStyle(document.body).getPropertyValue('--font-text-size')) !== null && _a !== void 0 ? _a : '0'); - if (!fontSize) { - fontSize = parseFloat(getComputedStyle(document.documentElement).fontSize); - } - return fontSize; -}; -const calculateInlineTitleSize = () => { - const fontSize = calculateFontTextSize(); - const inlineTitleSize = parseFloat(getComputedStyle(document.body).getPropertyValue('--inline-title-size')); - return fontSize * inlineTitleSize; -}; -const isHeader = (value) => { - return /^h[1-6]$/.test(value); -}; -const calculateHeaderSize = (header) => { - const fontSize = calculateFontTextSize(); - const headerSize = parseFloat(getComputedStyle(document.body).getPropertyValue(`--${header}-size`)); - return fontSize * headerSize; -}; - -class EmojiStyleSetting extends IconFolderSetting { - display() { - const emojiStyle = new obsidian.Setting(this.containerEl) - .setName('Emoji style') - .setDesc('Change the style of your emojis.'); - emojiStyle.addDropdown((dropdown) => { - dropdown.addOption('native', 'Native'); - dropdown.addOption('twemoji', 'Twemoji'); - dropdown.setValue(this.plugin.getSettings().emojiStyle); - dropdown.onChange((value) => __awaiter(this, void 0, void 0, function* () { - this.plugin.getSettings().emojiStyle = value; - this.updateDOM(); - yield this.plugin.saveIconFolderData(); - })); - }); - } - updateDOM() { - for (const fileExplorer of this.plugin.getRegisteredFileExplorers()) { - const fileItems = Object.entries(fileExplorer.fileItems); - for (const [path, _] of fileItems) { - let iconName = this.plugin.getData()[path]; - if (!iconName) { - continue; - } - const data = this.plugin.getData()[path]; - if (typeof data === 'object') { - const data = this.plugin.getData()[path]; - if (data.iconName) { - iconName = data.iconName; - } - } - if (emoji.isEmoji(iconName)) { - dom.createIconNode(this.plugin, path, iconName); - if (this.plugin.getSettings().iconInTabsEnabled) { - const tabLeaves = iconTabs.getTabLeavesOfFilePath(this.plugin, path); - for (const tabLeaf of tabLeaves) { - iconTabs.update(this.plugin, iconName, tabLeaf.tabHeaderInnerIconEl); - } - } - if (this.plugin.getSettings().iconInTitleEnabled) { - for (const openedFile of getAllOpenedFiles(this.plugin)) { - const activeView = openedFile.leaf.view; - if (activeView instanceof obsidian.MarkdownView && - openedFile.path === path) { - titleIcon.add(this.plugin, activeView.inlineTitleEl, iconName, { - fontSize: calculateInlineTitleSize(), - }); - } - } - } - } - } - } - for (const rule of customRule.getSortedRules(this.plugin)) { - customRule.addToAllFiles(this.plugin, rule); - } - } -} - -/** - * Helper function that refreshes the style of all the icons that are defined - * or in a custom rule involved. - * @param plugin Instance of the IconFolderPlugin. - */ -const refreshStyleOfIcons = (plugin) => __awaiter(void 0, void 0, void 0, function* () { - // Refreshes the icon style for all normally added icons. - style.refreshIconNodes(plugin); - // Refreshes the icon style for all custom icon rules, when the color of the rule is - // not defined. - for (const rule of customRule.getSortedRules(plugin)) { - const fileItems = yield customRule.getFileItems(plugin, rule); - for (const fileItem of fileItems) { - const titleEl = getFileItemTitleEl(fileItem); - const iconNode = titleEl.querySelector('.iconize-icon'); - let iconContent = iconNode.innerHTML; - iconContent = style.applyAll(plugin, iconContent, iconNode); - if (rule.color) { - iconContent = svg.colorize(iconContent, rule.color); - iconNode.style.color = rule.color; - } - iconNode.innerHTML = iconContent; - } - } -}); -var helper = { - refreshStyleOfIcons, -}; - -class ExtraMarginSetting extends IconFolderSetting { - display() { - var _a, _b; - const extraMarginSetting = new obsidian.Setting(this.containerEl) - .setName('Extra margin (in pixels)') - .setDesc('Change the margin of the icons.') - .setClass('iconize-setting'); - const extraMarginDropdown = new obsidian.DropdownComponent(extraMarginSetting.controlEl).addOptions({ - top: 'Top', - right: 'Right', - bottom: 'Bottom', - left: 'Left', - }); - const extraMarginSlider = new obsidian.SliderComponent(extraMarginSetting.controlEl) - .setLimits(-24, 24, 1) - .setDynamicTooltip() - .setValue((_b = (_a = this.plugin.getSettings().extraMargin) === null || _a === void 0 ? void 0 : _a.top) !== null && _b !== void 0 ? _b : 2) - .onChange((val) => __awaiter(this, void 0, void 0, function* () { - const dropdownValue = extraMarginDropdown.getValue(); - if (this.plugin.getSettings().extraMargin) { - this.plugin.getSettings().extraMargin[dropdownValue] = val; - } - else { - this.plugin.getSettings().extraMargin = { - [dropdownValue]: val, - }; - } - yield this.plugin.saveIconFolderData(); - helper.refreshStyleOfIcons(this.plugin); - })); - extraMarginDropdown.onChange((val) => { - var _a; - if (this.plugin.getSettings().extraMargin) { - extraMarginSlider.setValue((_a = this.plugin.getSettings().extraMargin[val]) !== null && _a !== void 0 ? _a : 2); - } - else { - extraMarginSlider.setValue(2); - } - }); - extraMarginSetting.components.push(extraMarginDropdown, extraMarginSlider); - } -} - -class IconColorSetting extends IconFolderSetting { - display() { - var _a; - const colorCustomization = new obsidian.Setting(this.containerEl) - .setName('Icon color') - .setDesc('Change the color of the displayed icons.'); - const colorPicker = new obsidian.ColorComponent(colorCustomization.controlEl) - .setValue((_a = this.plugin.getSettings().iconColor) !== null && _a !== void 0 ? _a : '#000000') - .onChange((value) => __awaiter(this, void 0, void 0, function* () { - this.plugin.getSettings().iconColor = value; - yield this.plugin.saveIconFolderData(); - helper.refreshStyleOfIcons(this.plugin); - })); - colorCustomization.addButton((button) => { - button - .setButtonText('Default') - .setTooltip('Set color to the default one') - .onClick(() => __awaiter(this, void 0, void 0, function* () { - colorPicker.setValue('#000000'); - this.plugin.getSettings().iconColor = null; - yield this.plugin.saveIconFolderData(); - helper.refreshStyleOfIcons(this.plugin); - })); - }); - colorCustomization.components.push(colorPicker); - } -} - -class IconFontSizeSetting extends IconFolderSetting { - display() { - new obsidian.Setting(this.containerEl) - .setName('Icon font size (in pixels)') - .setDesc('Change the font size of the displayed icons.') - .addSlider((slider) => { - var _a; - slider - .setLimits(10, 24, 1) - .setDynamicTooltip() - .setValue((_a = this.plugin.getSettings().fontSize) !== null && _a !== void 0 ? _a : DEFAULT_SETTINGS.fontSize) - .onChange((val) => __awaiter(this, void 0, void 0, function* () { - this.plugin.getSettings().fontSize = val; - yield this.plugin.saveIconFolderData(); - helper.refreshStyleOfIcons(this.plugin); - })); - }); - } -} - -class IconPacksPathSetting extends IconFolderSetting { - display() { - const iconPacksPathSetting = new obsidian.Setting(this.containerEl) - .setName('Icon packs folder path') - .setDesc('Change the default icon packs folder path.'); - iconPacksPathSetting.addText((text) => { - this.iconPacksSettingTextComp = text; - text.setValue(this.plugin.getSettings().iconPacksPath); - }); - iconPacksPathSetting.addButton((btn) => { - btn.setButtonText('Save'); - btn.onClick(() => __awaiter(this, void 0, void 0, function* () { - const newPath = this.iconPacksSettingTextComp.getValue(); - const oldPath = this.plugin.getSettings().iconPacksPath; - if (oldPath === this.iconPacksSettingTextComp.getValue()) { - return; - } - new obsidian.Notice('Saving in progress...'); - setPath(newPath); - yield createDefaultDirectory(this.plugin); - yield moveIconPackDirectories(this.plugin, oldPath, newPath); - this.plugin.getSettings().iconPacksPath = newPath; - yield this.plugin.saveIconFolderData(); - new obsidian.Notice('...saved successfully'); - })); - }); - } -} - -class IconPacksBackgroundChecker extends IconFolderSetting { - display() { - new obsidian.Setting(this.containerEl) - .setName('Icons background check') - .setDesc('Check in the background on every load of Obsidian, if icons are missing and it will try to add them to the specific icon pack.') - .addToggle((toggle) => { - toggle - .setValue(this.plugin.getSettings().iconsBackgroundCheckEnabled) - .onChange((enabled) => __awaiter(this, void 0, void 0, function* () { - this.plugin.getSettings().iconsBackgroundCheckEnabled = enabled; - yield this.plugin.saveIconFolderData(); - if (enabled) { - new obsidian.Notice('You need to reload Obsidian for this to take effect.', 10000); - } - })); - }); - } -} - -class IconPackBrowserModal extends obsidian.FuzzySuggestModal { - constructor(app, plugin) { - super(app); - this.plugin = plugin; - this.resultContainerEl.classList.add('iconize-browse-modal'); - this.inputEl.placeholder = 'Select to download icon pack'; - } - // eslint-disable-next-line - onAddedIconPack() { } - onOpen() { - super.onOpen(); - } - onClose() { - this.contentEl.empty(); - } - getItemText(item) { - const prefix = createIconPackPrefix(item.name); - return `${item.displayName} (${prefix})`; - } - getItems() { - const predefinedIconPacks = Object.values(iconPacks$1); - const allIconPacks = getAllIconPacks(); - return predefinedIconPacks.filter((iconPack) => allIconPacks.find((ip) => iconPack.name === ip.name) === undefined); - } - onChooseItem(item, _event) { - return __awaiter(this, void 0, void 0, function* () { - new obsidian.Notice(`Adding ${item.displayName}...`); - const arrayBuffer = yield downloadZipFile(item.downloadLink); - yield createZipFile(this.plugin, `${item.name}.zip`, arrayBuffer); - yield registerIconPack(item.name, arrayBuffer); - new obsidian.Notice(`...${item.displayName} added`); - this.onAddedIconPack(); - }); - } - renderSuggestion(item, el) { - super.renderSuggestion(item, el); - el.innerHTML = `
    ${el.innerHTML}
    `; - } -} - -class PredefinedIconPacksSetting extends IconFolderSetting { - constructor(plugin, containerEl, app, refreshDisplay) { - super(plugin, containerEl); - this.app = app; - this.refreshDisplay = refreshDisplay; - } - display() { - new obsidian.Setting(this.containerEl) - .setName('Add predefined icon pack') - .setDesc('Add a predefined icon pack that is officially supported.') - .addButton((btn) => { - btn.setButtonText('Browse icon packs'); - btn.onClick(() => { - const modal = new IconPackBrowserModal(this.app, this.plugin); - modal.onAddedIconPack = () => { - this.refreshDisplay(); - }; - modal.open(); - }); - }); - } -} - -class RecentlyUsedIconsSetting extends IconFolderSetting { - display() { - new obsidian.Setting(this.containerEl) - .setName('Recently used icons limit') - .setDesc('Change the limit for the recently used icons displayed in the icon selection modal.') - .addSlider((slider) => { - var _a; - slider - .setLimits(1, 25, 1) - .setDynamicTooltip() - .setValue((_a = this.plugin.getSettings().recentlyUsedIconsSize) !== null && _a !== void 0 ? _a : DEFAULT_SETTINGS.recentlyUsedIconsSize) - .onChange((val) => __awaiter(this, void 0, void 0, function* () { - this.plugin.getSettings().recentlyUsedIconsSize = val; - yield this.plugin.checkRecentlyUsedIcons(); - yield this.plugin.saveIconFolderData(); - })); - }); - } -} - -class ToggleIconInTabs extends IconFolderSetting { - display() { - new obsidian.Setting(this.containerEl) - .setName('Toggle icon in tabs') - .setDesc('Toggles the visibility of an icon for a file in the tab bar.') - .addToggle((toggle) => { - toggle - .setValue(this.plugin.getSettings().iconInTabsEnabled) - .onChange((enabled) => __awaiter(this, void 0, void 0, function* () { - this.plugin.getSettings().iconInTabsEnabled = enabled; - yield this.plugin.saveIconFolderData(); - // Updates the already opened files. - this.plugin.app.workspace - .getLeavesOfType('markdown') - .forEach((leaf) => { - const file = leaf.view.file; - if (file) { - const tabHeaderLeaf = leaf; - if (enabled) { - // Adds the icons to already opened files. - iconTabs.add(this.plugin, file, tabHeaderLeaf.tabHeaderInnerIconEl); - } - else { - // Removes the icons from already opened files. - iconTabs.remove(tabHeaderLeaf.tabHeaderInnerIconEl); - } - } - }); - })); - }); - } -} - -const checkMissingIcons = (plugin, data) => __awaiter(void 0, void 0, void 0, function* () { - const missingIcons = new Set(); - const allIcons = new Map(); - const getMissingIcon = (iconNameWithPrefix) => __awaiter(void 0, void 0, void 0, function* () { - const iconNextIdentifier = nextIdentifier(iconNameWithPrefix); - const iconName = iconNameWithPrefix.substring(iconNextIdentifier); - const iconPrefix = iconNameWithPrefix.substring(0, iconNextIdentifier); - const iconPackName = getIconPackNameByPrefix(iconPrefix); - const icon = getIconFromIconPack(iconPackName, iconPrefix, iconName); - if (!icon) { - logger.error(`Icon file with name ${iconNameWithPrefix} could not be found`); - return null; - } - const doesIconFileExists = yield plugin.app.vault.adapter.exists(`${getPath()}/${iconPackName}/${iconName}.svg`); - if (!doesIconFileExists) { - const possibleIcon = getSvgFromLoadedIcon(iconPrefix, iconName); - if (!possibleIcon) { - logger.error(`Icon SVG with name ${iconNameWithPrefix} could not be found`); - return null; - } - yield extractIconToIconPack(plugin, icon, possibleIcon); - return icon; - } - return null; - }); - for (const rule of plugin.getSettings().rules) { - if (!emoji.isEmoji(rule.icon)) { - allIcons.set(rule.icon, true); - const icon = yield getMissingIcon(rule.icon); - if (icon) { - missingIcons.add(icon); - } - } - } - for (const [_, value] of data) { - // Check for missing icon names. - let iconNameWithPrefix = value; - if (typeof value === 'object') { - iconNameWithPrefix = value.iconName; - } - if (iconNameWithPrefix && !emoji.isEmoji(iconNameWithPrefix)) { - allIcons.set(iconNameWithPrefix, true); - const icon = yield getMissingIcon(iconNameWithPrefix); - if (icon) { - missingIcons.add(icon); - } - } - } - // Show notice that background check is running. - if (missingIcons.size !== 0) { - new obsidian.Notice(`[${config.PLUGIN_NAME}] Background Check: found missing icons. Adding missing icons...`, 10000); - } - // Iterates over all the missing icons with its path and adds the icon to the node. - for (const icon of missingIcons) { - const normalizedName = getNormalizedName(icon.prefix + icon.name); - const nodesWithIcon = document.querySelectorAll(`[${config.ICON_ATTRIBUTE_NAME}="${normalizedName}"]`); - nodesWithIcon.forEach((node) => { - dom.setIconForNode(plugin, normalizedName, node); - }); - } - // Show notice that background check was finished. - if (missingIcons.size !== 0) { - new obsidian.Notice(`[${config.PLUGIN_NAME}] Background Check: added missing icons`, 10000); - } - // Remove all icon files that can not be found in the data. - for (const iconPack of getAllIconPacks()) { - // Checks if the icon pack exists. - const doesIconPackExist = yield plugin.app.vault.adapter.exists(`${getPath()}/${iconPack.name}`); - if (!doesIconPackExist) { - continue; - } - const iconFiles = yield plugin.app.vault.adapter.list(`${getPath()}/${iconPack.name}`); - for (const iconFilePath of iconFiles.files) { - const iconNameWithExtension = iconFilePath.split('/').pop(); - // Removes the file extension. - const iconName = iconNameWithExtension === null || iconNameWithExtension === void 0 ? void 0 : iconNameWithExtension.substring(0, iconNameWithExtension.length - 4); - const iconNameWithPrefix = iconPack.prefix + iconName; - const doesIconExist = allIcons.get(iconNameWithPrefix); - if (!doesIconExist) { - const path = `${getPath()}/${iconPack.name}/${iconName}.svg`; - const doesPathExist = yield plugin.app.vault.adapter.exists(path); - if (doesPathExist) { - logger.info(`Removing icon with path '${path}' because it is not used anymore`); - // Removes the icon file. - yield plugin.app.vault.adapter.remove(`${getPath()}/${iconPack.name}/${iconName}.svg`); - } - } - } - } -}); -/** - * This function adds all the possible icons to the corresponding nodes. It - * adds the icons, that are defined in the data as a basic string to the nodes - * and the custom rule icons. - * @param plugin Instance of IconFolderPlugin. - * @param data Data that will be used to add all the icons to the nodes. - * @param registeredFileExplorers A WeakSet of file explorers that are being used as a - * cache for already handled file explorers. - * @param callback Callback is being called whenever the icons are added to one file - * explorer. - */ -const addAll = (plugin, data, registeredFileExplorers, callback) => { - const fileExplorers = plugin.app.workspace.getLeavesOfType('file-explorer'); - for (const fileExplorer of fileExplorers) { - if (registeredFileExplorers.has(fileExplorer.view)) { - continue; - } - registeredFileExplorers.add(fileExplorer.view); - // Adds icons to already open file tabs. - if (plugin.getSettings().iconInTabsEnabled) { - for (const leaf of plugin.app.workspace.getLeavesOfType('markdown')) { - const file = leaf.view.file; - if (file) { - const tabHeaderLeaf = leaf; - const iconColor = plugin.getIconColor(file.path); - iconTabs.add(plugin, file, tabHeaderLeaf.tabHeaderInnerIconEl, { - iconColor, - }); - } - } - } - for (const [dataPath, value] of data) { - const fileItem = fileExplorer.view.fileItems[dataPath]; - if (fileItem) { - const titleEl = getFileItemTitleEl(fileItem); - const titleInnerEl = getFileItemInnerTitleEl(fileItem); - // Need to check this because refreshing the plugin will duplicate all the icons. - if (titleEl.children.length === 2 || titleEl.children.length === 1) { - const iconName = typeof value === 'string' ? value : value.iconName; - const iconColor = typeof value === 'string' ? undefined : value.iconColor; - if (iconName) { - // Removes a possible existing icon. - const existingIcon = titleEl.querySelector('.iconize-icon'); - if (existingIcon) { - existingIcon.remove(); - } - // Creates the new node with the icon inside. - const iconNode = titleEl.createDiv(); - iconNode.setAttribute(config.ICON_ATTRIBUTE_NAME, iconName); - iconNode.classList.add('iconize-icon'); - IconCache.getInstance().set(dataPath, { - iconNameWithPrefix: iconName, - }); - dom.setIconForNode(plugin, iconName, iconNode, iconColor); - titleEl.insertBefore(iconNode, titleInnerEl); - } - } - } - } - // Callback function to register other events to this file explorer. - callback === null || callback === void 0 ? void 0 : callback(); - } - // Handles the custom rules. - for (const rule of customRule.getSortedRules(plugin)) { - customRule.addToAllFiles(plugin, rule); - } -}; -/** - * Gets the icon of a given path. This function returns the first occurrence of an icon. - * @param plugin Instance of the IconFolderPlugin. - * @param path Path to get the icon of. - * @returns The icon of the path if it exists, undefined otherwise. - */ -const getByPath = (plugin, path) => { - if (path === 'settings' || path === 'migrated') { - return undefined; - } - const value = plugin.getData()[path]; - if (typeof value === 'string') { - // If the value is a plain icon name, return it. - return value; - } - else if (typeof value === 'object') { - const v = value; - if (v.iconName !== null) { - return v.iconName; - } - } - // Tries to get the custom rule for the path and returns its icon if it exists. - const rule = customRule.getSortedRules(plugin).find((rule) => { - return customRule.doesMatchPath(rule, path); - }); - if (rule) { - return rule.icon; - } - return undefined; -}; -/** - * Gets all the icons with their paths as an object. - * @param plugin Instance of the IconFolderPlugin. - * @returns An object that consists of the path and the icon name for the data - * or custom rule. - */ -const getAllWithPath = (plugin) => { - const result = []; - Object.keys(plugin.getData()).forEach((path) => { - if (path === 'settings' || path === 'migrated') { - return; - } - const icon = getByPath(plugin, path); - if (icon && !emoji.isEmoji(icon)) { - result.push({ path, icon }); - } - }); - // Add all icons for the custom rules with the rule as the path. - for (const rule of plugin.getSettings().rules) { - if (!emoji.isEmoji(rule.icon)) { - result.push({ path: rule.rule, icon: rule.icon }); - } - } - return result; -}; -/** - * Returns the {@link Icon} for the given icon name. It is important, that the icon name - * contains the icon pack prefix. - * @param iconNameWithPrefix String that contains the icon pack prefix combined with the - * icon name. - * @returns Icon if it exists, `null` otherwise. - */ -const getIconByName = (iconNameWithPrefix) => { - const iconNextIdentifier = nextIdentifier(iconNameWithPrefix); - const iconName = iconNameWithPrefix.substring(iconNextIdentifier); - const iconPrefix = iconNameWithPrefix.substring(0, iconNextIdentifier); - const iconPackName = getIconPackNameByPrefix(iconPrefix); - const icon = getIconFromIconPack(iconPackName, iconPrefix, iconName); - if (!icon) { - return null; - } - return icon; -}; -/** - * Returns the {@link Icon} for the given path. - * @param plugin IconFolderPlugin instance. - * @param path String which is the path to get the icon of. - * @returns Icon or Emoji as string if it exists, `null` otherwise. - */ -const getIconByPath = (plugin, path) => { - const iconNameWithPrefix = getByPath(plugin, path); - if (!iconNameWithPrefix) { - return null; - } - if (emoji.isEmoji(iconNameWithPrefix)) { - return iconNameWithPrefix; - } - return getIconByName(iconNameWithPrefix); -}; -var icon = { - addAll, - getByPath, - getAllWithPath, - getIconByPath, - getIconByName, - checkMissingIcons, -}; - -class ToggleIconInTitle extends IconFolderSetting { - updateLeaves(options) { - this.plugin.app.workspace.getLeavesOfType('markdown').forEach((leaf) => { - const view = leaf.view; - if (view instanceof obsidian.MarkdownView) { - const foundIcon = icon.getIconByPath(this.plugin, view.file.path); - if (foundIcon && options.enabled) { - if (options.removeBeforeReAdd) { - // Remove the icon before re-adding it. This is needed to update the DOM because - // the icon node will be inserted in the beginning inline title node. - titleIcon.remove(view.contentEl); - } - const content = typeof foundIcon === 'string' ? foundIcon : foundIcon.svgElement; - titleIcon.add(this.plugin, view.inlineTitleEl, content, { - fontSize: calculateInlineTitleSize(), - }); - } - else { - titleIcon.remove(view.contentEl); - } - } - }); - } - display() { - new obsidian.Setting(this.containerEl) - .setName('Toggle icon in title') - .setDesc('Toggles the visibility of an icon above the title of a file.') - .addDropdown((dropdown) => { - this.dropdown = dropdown; - dropdown.setDisabled(!this.plugin.getSettings().iconInTitleEnabled); - dropdown.addOptions({ - above: 'Above title', - inline: 'Next to title', - }); - dropdown.setValue(this.plugin.getSettings().iconInTitlePosition); - dropdown.onChange((value) => __awaiter(this, void 0, void 0, function* () { - this.plugin.getSettings().iconInTitlePosition = - value; - yield this.plugin.saveIconFolderData(); - this.updateLeaves({ enabled: true, removeBeforeReAdd: true }); - })); - }) - .addToggle((toggle) => { - toggle - .setValue(this.plugin.getSettings().iconInTitleEnabled) - .onChange((enabled) => __awaiter(this, void 0, void 0, function* () { - if (this.dropdown) { - this.dropdown.setDisabled(!enabled); - } - this.plugin.getSettings().iconInTitleEnabled = enabled; - yield this.plugin.saveIconFolderData(); - this.updateLeaves({ enabled }); - })); - }); - } -} - -class FrontmatterOptions extends IconFolderSetting { - display() { - new obsidian.Setting(this.containerEl) - .setName('Use icon in frontmatter') - .setDesc('Toggles whether to set the icon based on the frontmatter property `icon`.') - .addToggle((toggle) => { - toggle - .setValue(this.plugin.getSettings().iconInFrontmatterEnabled) - .onChange((enabled) => __awaiter(this, void 0, void 0, function* () { - this.plugin.getSettings().iconInFrontmatterEnabled = enabled; - yield this.plugin.saveIconFolderData(); - })); - }); - new obsidian.Setting(this.containerEl) - .setName('Frontmatter icon field name') - .setDesc('Sets the name of the frontmatter field which contains the icon.') - .addText((text) => { - this.iconFieldNameTextComp = text; - text.setValue(this.plugin.getSettings().iconInFrontmatterFieldName); - }) - .addButton((button) => { - button.setButtonText('Save'); - button.onClick(() => __awaiter(this, void 0, void 0, function* () { - const newValue = this.iconFieldNameTextComp.getValue(); - const oldValue = this.plugin.getSettings().iconInFrontmatterFieldName; - if (newValue === oldValue) { - return; - } - this.plugin.getSettings().iconInFrontmatterFieldName = newValue; - yield this.plugin.saveIconFolderData(); - new obsidian.Notice('...saved successfully'); - })); - }); - new obsidian.Setting(this.containerEl) - .setName('Frontmatter icon color field name') - .setDesc('Sets the name of the frontmatter field which contains the icon color.') - .addText((text) => { - this.iconColorFieldNameTextComp = text; - text.setValue(this.plugin.getSettings().iconColorInFrontmatterFieldName); - }) - .addButton((button) => { - button.setButtonText('Save'); - button.onClick(() => __awaiter(this, void 0, void 0, function* () { - const newValue = this.iconColorFieldNameTextComp.getValue(); - const oldValue = this.plugin.getSettings().iconColorInFrontmatterFieldName; - if (newValue === oldValue) { - return; - } - this.plugin.getSettings().iconColorInFrontmatterFieldName = newValue; - yield this.plugin.saveIconFolderData(); - new obsidian.Notice('...saved successfully'); - })); - }); - } -} - -class ToggleIconsInEditor extends IconFolderSetting { - display() { - new obsidian.Setting(this.containerEl) - .setName('Toggle icons while editing notes') - .setDesc('Toggles whether you are able to add and see icons in your notes and editor (e.g., ability to have :LiSofa: as an icon in your notes).') - .addToggle((toggle) => { - toggle - .setValue(this.plugin.getSettings().iconsInNotesEnabled) - .onChange((enabled) => __awaiter(this, void 0, void 0, function* () { - this.plugin.getSettings().iconsInNotesEnabled = enabled; - yield this.plugin.saveIconFolderData(); - new obsidian.Notice(`[${config.PLUGIN_NAME}] Obsidian has to be restarted for this change to take effect.`); - })); - }); - } -} - -class ToggleIconsInLinks extends IconFolderSetting { - display() { - new obsidian.Setting(this.containerEl) - .setName('Toggle icons in links') - .setDesc('Toggles whether you are able to see icons in the links to other notes') - .addToggle((toggle) => { - toggle - .setValue(this.plugin.getSettings().iconsInLinksEnabled) - .onChange((enabled) => __awaiter(this, void 0, void 0, function* () { - this.plugin.getSettings().iconsInLinksEnabled = enabled; - yield this.plugin.saveIconFolderData(); - new obsidian.Notice(`[${config.PLUGIN_NAME}] Obsidian has to be restarted for this change to take effect.`); - })); - }); - } -} - -class IconIdentifierSetting extends IconFolderSetting { - display() { - const setting = new obsidian.Setting(this.containerEl) - .setName('Icon identifier') - .setDesc('Change the icon identifier used in notes.') - .setClass('iconize-setting'); - setting.addText((text) => { - this.textComp = text; - text.setValue(this.plugin.getSettings().iconIdentifier); - }); - setting.addButton((btn) => { - btn.setButtonText('Save'); - btn.onClick(() => __awaiter(this, void 0, void 0, function* () { - const newIdentifier = this.textComp.getValue(); - const oldIdentifier = this.plugin.getSettings().iconIdentifier; - if (newIdentifier === oldIdentifier) { - return; - } - this.plugin.getSettings().iconIdentifier = newIdentifier; - yield this.plugin.saveIconFolderData(); - new obsidian.Notice('...saved successfully'); - })); - }); - } -} - -class DebugMode extends IconFolderSetting { - display() { - new obsidian.Setting(this.containerEl) - .setName('Toggle Debug Mode') - .setDesc('Toggle debug mode to see more detailed logs in the console. Do not touch this unless you know what you are doing.') - .addToggle((toggle) => { - toggle - .setValue(this.plugin.getSettings().debugMode) - .onChange((enabled) => __awaiter(this, void 0, void 0, function* () { - this.plugin.getSettings().debugMode = enabled; - yield this.plugin.saveIconFolderData(); - })); - }); - } -} - -class IconFolderSettings extends obsidian.PluginSettingTab { - constructor(app, plugin) { - super(app, plugin); - this.plugin = plugin; - } - display() { - const { plugin, containerEl, app } = this; - containerEl.empty(); - containerEl.createEl('h1', { text: 'General' }); - new RecentlyUsedIconsSetting(plugin, containerEl).display(); - new IconPacksPathSetting(plugin, containerEl).display(); - new IconPacksBackgroundChecker(plugin, containerEl).display(); - new EmojiStyleSetting(plugin, containerEl).display(); - new IconIdentifierSetting(plugin, containerEl).display(); - new DebugMode(plugin, containerEl).display(); - containerEl.createEl('h3', { text: 'Visibility of icons' }); - new ToggleIconInTabs(plugin, containerEl).display(); - new ToggleIconInTitle(plugin, containerEl).display(); - new FrontmatterOptions(plugin, containerEl).display(); - new ToggleIconsInEditor(plugin, containerEl).display(); - new ToggleIconsInLinks(plugin, containerEl).display(); - containerEl.createEl('h1', { - text: 'Icon customization for files/folders', - }); - new IconFontSizeSetting(plugin, containerEl).display(); - new IconColorSetting(plugin, containerEl).display(); - new ExtraMarginSetting(plugin, containerEl).display(); - containerEl.createEl('h1', { text: 'Custom icon rules' }); - new CustomIconRuleSetting(plugin, containerEl, app, () => this.display()).display(); - containerEl.createEl('h1', { text: 'Icon packs' }); - new PredefinedIconPacksSetting(plugin, containerEl, app, () => this.display()).display(); - new CustomIconPackSetting(plugin, containerEl, () => this.display()).display(); - } -} - -function around(obj, factories) { - const removers = Object.keys(factories).map(key => around1(obj, key, factories[key])); - return removers.length === 1 ? removers[0] : function () { removers.forEach(r => r()); }; -} -function around1(obj, method, createWrapper) { - const original = obj[method], hadOwn = obj.hasOwnProperty(method); - let current = createWrapper(original); - // Let our wrapper inherit static props from the wrapping method, - // and the wrapping method, props from the original method - if (original) - Object.setPrototypeOf(current, original); - Object.setPrototypeOf(wrapper, current); - obj[method] = wrapper; - // Return a callback to allow safe removal - return remove; - function wrapper(...args) { - // If we have been deactivated and are no longer wrapped, remove ourselves - if (current === original && obj[method] === wrapper) - remove(); - return current.apply(this, args); - } - function remove() { - // If no other patches, just do a direct removal - if (obj[method] === wrapper) { - if (hadOwn) - obj[method] = original; - else - delete obj[method]; - } - if (current === original) - return; - // Else pass future calls through, and remove wrapper from the prototype chain - current = original; - Object.setPrototypeOf(wrapper, original || Function); - } -} - -class InternalPluginInjector { - constructor(plugin) { - this.plugin = plugin; - } - get fileExplorers() { - return this.plugin.app.workspace.getLeavesOfType('file-explorer'); - } - // eslint-disable-next-line - onMount() { } -} - -/** - * @deprecated After obsidian 1.2.6 in favor of the bookmarks plugin. - */ -class StarredInternalPlugin extends InternalPluginInjector { - constructor(plugin) { - super(plugin); - } - get starred() { - return this.plugin.app.internalPlugins.getPluginById('starred'); - } - get enabled() { - return this.plugin.app.internalPlugins.getPluginById('starred').enabled; - } - get leaf() { - const leaf = this.plugin.app.workspace.getLeavesOfType('starred'); - if (!leaf) { - return undefined; - } - if (leaf.length === 1) { - return leaf[0].view; - } - return undefined; - } - setIcon(filePath, node) { - const iconName = icon.getByPath(this.plugin, filePath); - const iconNode = node.querySelector('.nav-file-icon'); - if (!iconNode || !iconName) { - return; - } - dom.setIconForNode(this.plugin, iconName, iconNode); - } - computeNodesWithPath(callback) { - const { itemLookup, containerEl } = this.leaf; - const navFileEls = containerEl.querySelectorAll('.nav-file'); - navFileEls.forEach((navFileEl) => { - const lookupFile = itemLookup.get(navFileEl); - if (!lookupFile) { - return; - } - callback(navFileEl, lookupFile.path); - }); - } - onMount() { - const nodesWithPath = {}; - this.computeNodesWithPath((node, filePath) => { - nodesWithPath[filePath] = node; - }); - Object.entries(nodesWithPath).forEach(([filePath, node]) => this.setIcon(filePath, node)); - } - register() { - if (!this.plugin.app.internalPlugins.getPluginById('file-explorer').enabled) { - console.info(`[${config.PLUGIN_NAME}/Starred] Skipping starred internal plugin registration because file-explorer is not enabled.`); - return; - } - if (!this.enabled) { - console.info(`[${config.PLUGIN_NAME}/Starred] Skipping starred internal plugin registration because it's not enabled.`); - return; - } - // eslint-disable-next-line - const self = this; - this.plugin.register(around(this.starred.instance, { - addItem: function (next) { - return function (file) { - next.call(this, file); - self.onMount(); - }; - }, - removeItem: function (next) { - return function (file) { - next.call(this, file); - self.onMount(); - }; - }, - })); - } -} - -class BookmarkInternalPlugin extends InternalPluginInjector { - constructor(plugin) { - super(plugin); - } - get bookmark() { - return this.plugin.app.internalPlugins.getPluginById('bookmarks'); - } - get enabled() { - return this.plugin.app.internalPlugins.getPluginById('bookmarks').enabled; - } - get leaf() { - const leaf = this.plugin.app.workspace.getLeavesOfType('bookmarks'); - if (!leaf) { - return undefined; - } - if (leaf.length === 1) { - return leaf[0].view; - } - return undefined; - } - setIconOrRemove(filePath, node) { - var _a; - const iconName = icon.getByPath(this.plugin, filePath); - let iconNode = node.querySelector('.tree-item-icon'); - if (!iconName) { - if (iconNode) { - // Reset the icon to the default obsidian icon. - const items = this.bookmark.instance.items; - const item = items.find((item) => item.path === filePath); - if ((item === null || item === void 0 ? void 0 : item.type) === 'file') { - iconNode.innerHTML = DEFAULT_FILE_ICON; - } - else if ((item === null || item === void 0 ? void 0 : item.type) === 'folder') { - iconNode.innerHTML = DEFAULT_FOLDER_ICON; - } - } - return; - } - // If the icon node is not defined, then we need to recreate it. - if (!iconNode) { - // Get the tree-item-self element where the original icon is set. - const treeItemSelf = node.querySelector('.tree-item-self'); - if (!treeItemSelf) { - return; - } - iconNode = node.createDiv({ cls: 'tree-item-icon' }); - // Prepends the icon to the tree-item-self element as a first child. - treeItemSelf.prepend(iconNode); - } - const defaultMargin = iconNode.style.margin; - const iconColor = (_a = this.plugin.getIconColor(filePath)) !== null && _a !== void 0 ? _a : this.plugin.getSettings().iconColor; - dom.setIconForNode(this.plugin, iconName, iconNode, iconColor); - // Reset the margin to the default value to prevent overlapping with the text. - iconNode.style.margin = defaultMargin; - } - computeNodesWithPath(callback) { - if (!this.leaf) { - return; - } - /** - * Retrieves the lookup item from the bookmark plugin and calls the callback with the - * element and the path of the item. - * @param item BookmarkItem object which can be a folder or a file. - * @param itemDoms WeakMap of the bookmark plugin which contains the lookup item. - */ - const retrieveLookupItem = (item, itemDoms) => { - const lookupItem = itemDoms.get(item); - if (!lookupItem) { - return; - } - if (item.items) { - // If the item is a folder, then we need to retrieve all the items inside it. - for (const subItem of item.items) { - retrieveLookupItem(subItem, itemDoms); - } - } - // If the item is a `file` or a `folder` (not of type `group`), then we can call the callback. - if (item.type === 'file' || item.type === 'folder') { - callback(lookupItem.el, item.path); - } - }; - const { itemDoms } = this.leaf; - // Retrieves all the items of the bookmark plugin which areo objects. - const items = this.bookmark.instance.items; - items.forEach((item) => { - retrieveLookupItem(item, itemDoms); - }); - } - onMount() { - const nodesWithPath = {}; - this.computeNodesWithPath((node, filePath) => { - nodesWithPath[filePath] = node; - }); - Object.entries(nodesWithPath).forEach(([filePath, node]) => this.setIconOrRemove(filePath, node)); - } - register() { - if (!this.plugin.app.internalPlugins.getPluginById('file-explorer').enabled) { - console.info(`[${config.PLUGIN_NAME}/Bookmarks] Skipping bookmark internal plugin registration because file-explorer is not enabled.`); - return; - } - if (!this.enabled) { - console.info(`[${config.PLUGIN_NAME}/Bookmarks] Skipping bookmark internal plugin registration because it's not enabled.`); - return; - } - // eslint-disable-next-line - const self = this; - this.plugin.register(around(this.bookmark.instance, { - addItem: function (next) { - return function (...args) { - next.call(this, ...args); - // TODO: Remove in the future, I could not think of a better way to do this. - setTimeout(() => { - self.onMount(); - }, 1000); - }; - }, - removeItem: function (next) { - return function (...args) { - next.call(this, ...args); - self.onMount(); - }; - }, - })); - } -} - -class SuggestionIcon extends obsidian.EditorSuggest { - constructor(app, plugin) { - super(app); - this.plugin = plugin; - } - onTrigger(cursor, editor) { - // Isolate shortcode starting position closest to the cursor. - const shortcodeStart = editor - .getLine(cursor.line) - .substring(0, cursor.ch) - .lastIndexOf(this.plugin.getSettings().iconIdentifier); - // `onTrigger` needs to return `null` as soon as possible to save processing performance. - if (shortcodeStart === -1) { - return null; - } - // Regex for checking if the shortcode is not done yet. - const regex = new RegExp(`^(${this.plugin.getSettings().iconIdentifier})\\w+$`, 'g'); - const regexOngoingShortcode = editor - .getLine(cursor.line) - .substring(shortcodeStart, cursor.ch) - .match(regex); - if (regexOngoingShortcode === null) { - return null; - } - const startingIndex = editor - .getLine(cursor.line) - .indexOf(regexOngoingShortcode[0]); - return { - start: { - line: cursor.line, - ch: startingIndex, - }, - end: { - line: cursor.line, - ch: startingIndex + regexOngoingShortcode[0].length, - }, - query: regexOngoingShortcode[0], - }; - } - getSuggestions(context) { - const queryLowerCase = context.query - .substring(this.plugin.getSettings().iconIdentifier.length) - .toLowerCase(); - // Store all icons corresponding to the current query. - const iconsNameArray = getAllLoadedIconNames() - .filter((iconObject) => { - const name = iconObject.prefix.toLowerCase() + iconObject.name.toLowerCase(); - return name.toLowerCase().includes(queryLowerCase); - }) - .map((iconObject) => iconObject.prefix + iconObject.name); - // Store all emojis correspoding to the current query - parsing whitespaces and - // colons for shortcodes compatibility. - const emojisNameArray = Object.keys(emoji.shortNames).filter((e) => { var _a; return (_a = emoji.getShortcode(e)) === null || _a === void 0 ? void 0 : _a.includes(queryLowerCase); }); - return [...iconsNameArray, ...emojisNameArray]; - } - renderSuggestion(value, el) { - const iconObject = icon.getIconByName(value); - el.style.display = 'flex'; - el.style.alignItems = 'center'; - el.style.gap = '0.25rem'; - if (iconObject) { - // Suggest an icon. - el.innerHTML = `${iconObject.svgElement} ${value}`; - } - else { - // Suggest an emoji - display its shortcode version. - const shortcode = emoji.getShortcode(value); - if (shortcode) { - el.innerHTML = `${value} ${shortcode}`; - } - } - } - selectSuggestion(value) { - const isEmoji = emoji.isEmoji(value.replace(/_/g, ' ')); - if (!isEmoji) { - saveIconToIconPack(this.plugin, value); - } - // Replace query with iconNameWithPrefix or emoji unicode directly. - const updatedValue = isEmoji - ? value - : `${this.plugin.getSettings().iconIdentifier}${value}${this.plugin.getSettings().iconIdentifier}`; - this.context.editor.replaceRange(updatedValue, this.context.start, this.context.end); - } -} - -class IconInTextWidget extends view.WidgetType { - constructor(plugin, id) { - super(); - this.plugin = plugin; - this.id = id; - this.start = -1; - this.end = -1; - } - setPosition(start, end) { - this.start = start; - this.end = end; - } - eq(other) { - return other instanceof IconInTextWidget && other.id === this.id; - } - getSize(view) { - let fontSize = calculateFontTextSize(); - const line = view.state.doc.lineAt(this.end); - const headerMatch = line.text.match(/^#{1,6}\s/); - if (headerMatch && headerMatch[0].trim()) { - const mapping = { - '#': 'h1', - '##': 'h2', - '###': 'h3', - '####': 'h4', - '#####': 'h5', - '######': 'h6', - }; - const header = mapping[headerMatch[0].trim()]; - fontSize = calculateHeaderSize(header); - } - return fontSize; - } - toDOM(view) { - const wrap = createSpan({ - cls: 'cm-iconize-icon', - attr: { - 'aria-label': this.id, - 'data-icon': this.id, - 'aria-hidden': 'true', - }, - }); - const foundIcon = icon.getIconByName(this.id); - const fontSize = this.getSize(view); - if (foundIcon) { - const svgElement = svg.setFontSize(foundIcon.svgElement, fontSize); - wrap.style.display = 'inline-flex'; - wrap.style.transform = 'translateY(13%)'; - wrap.innerHTML = svgElement; - } - else if (emoji.isEmoji(this.id)) { - wrap.innerHTML = emoji.parseEmoji(this.plugin.getSettings().emojiStyle, this.id, fontSize); - } - else { - wrap.append(`${this.plugin.getSettings().iconIdentifier}${this.id}${this.plugin.getSettings().iconIdentifier}`); - } - return wrap; - } - ignoreEvent() { - return false; - } -} - -class IconInLinkWidget extends view.WidgetType { - constructor(plugin, iconData, path) { - super(); - this.plugin = plugin; - this.iconData = iconData; - this.path = path; - } - toDOM() { - var _a; - const iconNode = document.createElement('span'); - const iconName = typeof this.iconData === 'string' - ? this.iconData - : this.iconData.prefix + this.iconData.name; - iconNode.style.color = - (_a = this.plugin.getIconColor(this.path)) !== null && _a !== void 0 ? _a : this.plugin.getSettings().iconColor; - iconNode.setAttribute('title', iconName); - iconNode.classList.add('iconize-icon-in-link'); - if (typeof this.iconData === 'string') { - iconNode.style.transform = 'translateY(0)'; - } - let innerHTML = typeof this.iconData === 'string' - ? this.iconData - : this.iconData.svgElement; - if (emoji.isEmoji(innerHTML)) { - innerHTML = emoji.parseEmoji(this.plugin.getSettings().emojiStyle, innerHTML); - } - iconNode.innerHTML = innerHTML; - return iconNode; - } - ignoreEvent() { - return true; - } -} - -const buildLinkDecorations = (view$1, plugin) => { - const builder = new state.RangeSetBuilder(); - const mdView = view$1.state.field(obsidian.editorInfoField); - for (const { from, to } of view$1.visibleRanges) { - language.syntaxTree(view$1.state).iterate({ - from, - to, - enter: (node) => { - const tokenProps = node.type.prop(language.tokenClassNodeProp); - if (tokenProps) { - const props = new Set(tokenProps.split(' ')); - const isLink = props.has('hmd-internal-link'); - if (isLink) { - let linkText = view$1.state.doc.sliceString(node.from, node.to); - linkText = linkText.split('#')[0]; - const file = plugin.app.metadataCache.getFirstLinkpathDest(linkText, mdView.file.basename); - if (file) { - const possibleIcon = icon.getIconByPath(plugin, file.path); - if (possibleIcon) { - const iconDecoration = view.Decoration.widget({ - widget: new IconInLinkWidget(plugin, possibleIcon, file.path), - }); - builder.add(node.from, node.from, iconDecoration); - } - } - } - } - }, - }); - } - return builder.finish(); -}; - -const buildTextDecorations = (view$1, plugin) => { - const ranges = []; - const iconInfo = view$1.state.field(plugin.positionField); - for (const { from, to } of view$1.visibleRanges) { - iconInfo.between(from - 1, to + 1, (from, to, { iconId }) => { - ranges.push([iconId, from, to]); - }); - } - return view.Decoration.set(ranges.map(([code, from, to]) => { - const widget = new IconInTextWidget(plugin, code); - widget.setPosition(from, to); - if (view$1.state.field(obsidian.editorLivePreviewField)) { - return view.Decoration.replace({ - widget, - side: -1, - }).range(from, to); - } - return view.Decoration.widget({ - widget, - side: -1, - }).range(to); - }), true); -}; - -const buildIconInTextPlugin = (plugin) => { - return view.ViewPlugin.fromClass(class IconPlugin { - constructor(view) { - this.plugin = plugin; - this.decorations = buildTextDecorations(view, plugin); - } - update(update) { - this.decorations = buildTextDecorations(update.view, this.plugin); - } - }, { - decorations: (v) => v.decorations, - provide: (plugin) => view.EditorView.atomicRanges.of((view$1) => { - const value = view$1.plugin(plugin); - return value ? value.decorations : view.Decoration.none; - }), - }); -}; - -const buildIconInLinksPlugin = (plugin) => { - return view.ViewPlugin.fromClass(class { - constructor(view) { - this.plugin = plugin; - this.decorations = buildLinkDecorations(view, plugin); - } - destroy() { } - update(update) { - if (update.docChanged || update.viewportChanged) { - this.decorations = buildLinkDecorations(update.view, this.plugin); - } - } - }, { - decorations: (v) => v.decorations, - }); -}; - -// TODO: Optimize the code to reduce the number of iterations and improve the -function checkForSourceMode(plugin) { - let isSourceMode = false; - // Iterate over all leaves to check if any is in source mode - plugin.app.workspace.iterateAllLeaves((leaf) => { - var _a; - if (!isSourceMode && leaf.view.getViewType() === 'markdown') { - if ((_a = leaf.getViewState().state) === null || _a === void 0 ? void 0 : _a.source) { - isSourceMode = true; - } - } - }); - return isSourceMode; -} -class IconPosition extends state.RangeValue { - constructor(text) { - super(); - this.text = text; - } - get iconId() { - return this.text; - } - eq(other) { - return other instanceof IconPosition && other.text === this.text; - } -} -/** - * Builds a position field for the editor state. This field will track the - * positions of the icons in the document. - **/ -const buildPositionField = (plugin) => { - /** - * Checks the ranges of the icons in the document. If the range is not - * excluded, the range is added to the range set. If the range is excluded, - * the range is removed from the range set. - * @param state EditorState to get the ranges from. - * @param excludeFrom Number to exclude from the ranges. - * @param excludeTo Number to exclude to the ranges. - * @param updateRange Function callback to update the range. - */ - const checkRanges = (state, excludeFrom, excludeTo, updateRange) => { - const isSourceMode = checkForSourceMode(plugin); - const text = state.doc.sliceString(0, state.doc.length); - const identifier = plugin.getSettings().iconIdentifier; - const regex = new RegExp(`(${identifier})((\\w{1,64}:\\d{17,18})|(\\w{1,64}))(${identifier})`, 'g'); - for (const { 0: rawCode, index: offset } of text.matchAll(regex)) { - const iconName = rawCode.substring(identifier.length, rawCode.length - identifier.length); - if (!icon.getIconByName(iconName)) { - continue; - } - const from = offset; - const to = offset + rawCode.length; - if (!isNodeInRangeAccepted(state, from, to)) { - continue; - } - if (offset < excludeFrom || offset > excludeTo) { - updateRange(from, to, new IconPosition(iconName), isSourceMode); - continue; - } - updateRange(from, to, new IconPosition(iconName), true); - } - for (const { 0: emojiName, index: offset } of text.matchAll(emoji.getRegex())) { - if (!emoji.isEmoji(emojiName)) { - continue; - } - const from = offset; - const to = offset + emojiName.length; - if (!isNodeInRangeAccepted(state, from, to)) { - continue; - } - if (offset < excludeFrom || offset > excludeTo) { - updateRange(from, to, new IconPosition(emojiName), isSourceMode); - continue; - } - updateRange(from, to, new IconPosition(emojiName), true); - } - }; - const isNodeInRangeAccepted = (state, from, to) => { - let isRangeAccepted = true; - language.syntaxTree(state).iterate({ - from, - to, - enter: ({ type }) => { - var _a; - if (type.name === 'Document') { - return; - } - const allowedNodeTypes = [ - 'header', - 'strong', - 'em', - 'quote', - 'link', - 'list-1', - 'list-2', - 'list-3', - 'highlight', - 'footref', - 'comment', - 'link-alias', - ]; - const excludedNodeTypes = [ - 'formatting', - 'hmd-codeblock', - 'inline-code', - 'hr', - ]; - const nodeProps = (_a = type.prop(language.tokenClassNodeProp)) !== null && _a !== void 0 ? _a : ''; - const s = new Set(nodeProps.split(' ')); - if (excludedNodeTypes.some((t) => s.has(t)) && - allowedNodeTypes.every((t) => !s.has(t))) { - isRangeAccepted = false; - } - }, - }); - return isRangeAccepted; - }; - return state.StateField.define({ - create: (state$1) => { - const rangeSet = new state.RangeSetBuilder(); - const changedLines = []; - checkRanges(state$1, -1, -1, (from, to, iconPosition) => { - changedLines.push({ from, to, iconPosition }); - }); - changedLines.sort((a, b) => a.from - b.from); - for (const { from, to, iconPosition } of changedLines) { - rangeSet.add(from, to, iconPosition); - } - return rangeSet.finish(); - }, - update: (rangeSet, transaction) => { - const newRanges = []; - if (!transaction.docChanged) { - if (transaction.selection) { - const from = transaction.selection.ranges[0].from; - const to = transaction.selection.ranges[0].to; - const lineEnd = transaction.state.doc.lineAt(to).length; - const lineStart = transaction.state.doc.lineAt(from).from; - // Checks the ranges of the icons in the document except for the - // excluded line start and end. - checkRanges(transaction.state, lineStart, lineStart + lineEnd, (from, to, value, removed) => { - rangeSet = rangeSet.update({ - filterFrom: from, - filterTo: to, - filter: () => false, - }); - if (!removed) { - newRanges.push(value.range(from, to)); - } - }); - } - else { - checkRanges(transaction.state, -1, -1, (from, to, value, removed) => { - rangeSet = rangeSet.update({ - filterFrom: from, - filterTo: to, - filter: () => false, - }); - if (!removed) { - newRanges.push(value.range(from, to)); - } - }); - } - newRanges.sort((a, b) => a.from - b.from); - rangeSet = rangeSet.update({ add: newRanges }); - return rangeSet; - } - rangeSet = rangeSet.map(transaction.changes); - const changedLines = []; - transaction.changes.iterChangedRanges((_f, _t, from, to) => { - changedLines.push([ - transaction.state.doc.lineAt(from).number, - transaction.state.doc.lineAt(to).number, - ]); - }); - for (const [start, end] of changedLines) { - const from = transaction.state.doc.line(start).from; - const to = transaction.state.doc.line(end).to; - rangeSet = rangeSet.update({ - filterFrom: from, - filterTo: to, - filter: () => false, - }); - const lineEnd = transaction.state.doc.line(end).length; - const lineStart = transaction.state.doc.line(end).from; - // Checks the ranges of the icons in the document except for the excluded - // line start and end. - checkRanges(transaction.state, lineStart, lineStart + lineEnd, (from, to, value, removed) => { - if (!removed) { - newRanges.push(value.range(from, to)); - } - }); - } - newRanges.sort((a, b) => a.from - b.from); - rangeSet = rangeSet.update({ add: newRanges }); - return rangeSet; - }, - }); -}; - -// TODO: Optimize the code to reduce the number of iterations and improve the -const createIconShortcodeRegex = (plugin) => { - return new RegExp(`(${plugin.getSettings().iconIdentifier})((\\w{1,64}:\\d{17,18})|(\\w{1,64}))(${plugin.getSettings().iconIdentifier})`, 'g'); -}; -const createTreeWalker = (plugin, root) => { - return document.createTreeWalker(root, NodeFilter.SHOW_ALL, { - acceptNode: function (node) { - if (node.nodeName === 'CODE') { - return NodeFilter.FILTER_REJECT; - } - else if (node.nodeName === '#text') { - if (node.nodeValue && - (emoji.getRegex().test(node.nodeValue) || - createIconShortcodeRegex(plugin).test(node.nodeValue))) { - return NodeFilter.FILTER_ACCEPT; - } - else { - return NodeFilter.FILTER_REJECT; - } - } - return NodeFilter.FILTER_SKIP; - }, - }); -}; -const checkForTextNodes = (treeWalker, match, cb) => { - let currentNode = treeWalker.currentNode; - while (currentNode) { - if (currentNode.nodeType === Node.TEXT_NODE) { - const text = currentNode; - const textNodes = [...Array.from(text.parentElement.childNodes)].filter((n) => n instanceof Text); - for (const text of textNodes) { - for (const code of [...text.wholeText.matchAll(match)] - .sort((a, b) => b.index - a.index) - .map((arr) => ({ text: arr[0], index: arr.index }))) { - if (!text.textContent) { - continue; - } - cb(text, code); - } - } - } - currentNode = treeWalker.nextNode(); - } -}; -const processIconInTextMarkdown = (plugin, element) => { - // Ignore if codeblock - const codeElement = element.querySelector('pre > code'); - if (codeElement) { - return; - } - const iconTreeWalker = createTreeWalker(plugin, element); - const iconShortcodeRegex = createIconShortcodeRegex(plugin); - const iconIdentifierLength = plugin.getSettings().iconIdentifier.length; - checkForTextNodes(iconTreeWalker, iconShortcodeRegex, (text, code) => { - var _a, _b, _c, _d; - const shortcode = code.text; - const iconName = shortcode.slice(iconIdentifierLength, shortcode.length - iconIdentifierLength); - const iconObject = icon.getIconByName(iconName); - if (iconObject) { - const toReplace = text.splitText(code.index); - const rootSpan = createSpan({ - cls: 'cm-iconize-icon', - attr: { - 'aria-label': iconName, - 'data-icon': iconName, - 'aria-hidden': 'true', - }, - }); - rootSpan.style.display = 'inline-flex'; - rootSpan.style.transform = 'translateY(13%)'; - const tagName = (_c = (_b = (_a = toReplace.parentElement) === null || _a === void 0 ? void 0 : _a.tagName) === null || _b === void 0 ? void 0 : _b.toLowerCase()) !== null && _c !== void 0 ? _c : ''; - let fontSize = calculateFontTextSize(); - if (isHeader(tagName)) { - fontSize = calculateHeaderSize(tagName); - const svgElement = svg.setFontSize(iconObject.svgElement, fontSize); - rootSpan.innerHTML = svgElement; - } - else { - const svgElement = svg.setFontSize(iconObject.svgElement, fontSize); - rootSpan.innerHTML = svgElement; - } - (_d = toReplace.parentElement) === null || _d === void 0 ? void 0 : _d.insertBefore(rootSpan, toReplace); - toReplace.textContent = toReplace.wholeText.substring(code.text.length); - } - }); - const emojiTreeWalker = createTreeWalker(plugin, element); - checkForTextNodes(emojiTreeWalker, emoji.getRegex(), (text, code) => { - var _a, _b, _c, _d; - if (!emoji.isEmoji(code.text)) { - return; - } - if (plugin.getSettings().emojiStyle === 'twemoji') { - const toReplace = text.splitText(code.index); - const tagName = (_c = (_b = (_a = toReplace.parentElement) === null || _a === void 0 ? void 0 : _a.tagName) === null || _b === void 0 ? void 0 : _b.toLowerCase()) !== null && _c !== void 0 ? _c : ''; - let fontSize = calculateFontTextSize(); - if (isHeader(tagName)) { - fontSize = calculateHeaderSize(tagName); - } - const emojiValue = emoji.parseEmoji(plugin.getSettings().emojiStyle, code.text, fontSize); - if (!emojiValue) { - return; - } - const emojiNode = createSpan(); - emojiNode.innerHTML = emojiValue; - (_d = toReplace.parentElement) === null || _d === void 0 ? void 0 : _d.insertBefore(emojiNode, toReplace); - toReplace.textContent = toReplace.wholeText.substring(code.text.length); - } - }); -}; - -const processIconInLinkMarkdown = (plugin, element, ctx) => { - const linkElements = element.querySelectorAll('a'); - if (!linkElements || linkElements.length === 0) { - return; - } - linkElements.forEach((linkElement) => { - var _a, _b; - // Skip if the link element e.g., is a tag. - if (!linkElement.hasAttribute('data-href')) { - return; - } - const linkHref = linkElement.getAttribute('href'); - if (!linkHref) { - logger.warn('Link element does not have an `href` attribute'); - return; - } - const file = plugin.app.metadataCache.getFirstLinkpathDest(linkHref, ctx.sourcePath); - if (!file) { - logger.warn('Link element does not have a linkpath to a file'); - return; - } - const path = file.path; - const iconValue = icon.getIconByPath(plugin, path); - if (!iconValue) { - return; - } - const iconName = typeof iconValue === 'string' - ? iconValue - : iconValue.prefix + iconValue.name; - const rootSpan = createSpan({ - cls: 'iconize-icon-in-link', - attr: { - title: iconName, - 'aria-label': iconName, - 'data-icon': iconName, - 'aria-hidden': 'true', - }, - }); - rootSpan.style.color = - (_a = plugin.getIconColor(path)) !== null && _a !== void 0 ? _a : plugin.getSettings().iconColor; - if (emoji.isEmoji(iconName)) { - const parsedEmoji = (_b = emoji.parseEmoji(plugin.getSettings().emojiStyle, iconName)) !== null && _b !== void 0 ? _b : iconName; - rootSpan.innerHTML = parsedEmoji; - } - else { - const svg = icon.getIconByName(iconName).svgElement; - if (svg) { - rootSpan.innerHTML = svg; - } - } - linkElement.prepend(rootSpan); - }); -}; - -class ChangeColorModal extends obsidian.Modal { - constructor(app, plugin, path) { - var _a; - super(app); - this.plugin = plugin; - this.path = path; - this.usedColor = this.plugin.getIconColor(this.path); - this.contentEl.style.display = 'block'; - this.modalEl.classList.add('iconize-custom-modal'); - this.titleEl.setText('Change color'); - const description = this.contentEl.createEl('p', { - text: 'Select a color for this icon', - cls: 'setting-item-description', - }); - description.style.marginBottom = 'var(--size-2-2)'; - const colorContainer = this.contentEl.createDiv(); - colorContainer.style.display = 'flex'; - colorContainer.style.alignItems = 'center'; - colorContainer.style.justifyContent = 'space-between'; - const colorPicker = new obsidian.ColorComponent(colorContainer) - .setValue((_a = this.usedColor) !== null && _a !== void 0 ? _a : '#000000') - .onChange((value) => { - this.usedColor = value; - }); - const defaultColorButton = new obsidian.ButtonComponent(colorContainer); - defaultColorButton.setTooltip('Set color to the default one'); - defaultColorButton.setButtonText('Reset'); - defaultColorButton.onClick(() => { - colorPicker.setValue('#000000'); - this.usedColor = undefined; - }); - // Save button. - const button = new obsidian.ButtonComponent(this.contentEl); - button.buttonEl.style.marginTop = 'var(--size-4-4)'; - button.buttonEl.style.float = 'right'; - button.setButtonText('Save Changes'); - button.onClick(() => __awaiter(this, void 0, void 0, function* () { - var _b; - new obsidian.Notice('Color of icon changed.'); - if (this.usedColor) { - this.plugin.addIconColor(this.path, this.usedColor); - } - else { - this.plugin.removeIconColor(this.path); - } - // Refresh the DOM. - const iconNode = dom.getIconNodeFromPath(this.path); - iconNode.style.color = (_b = this.usedColor) !== null && _b !== void 0 ? _b : null; - const colorizedInnerHtml = svg.colorize(iconNode.innerHTML, this.usedColor); - iconNode.innerHTML = colorizedInnerHtml; - this.close(); - })); - } - onOpen() { - super.onOpen(); - } - onClose() { - const { contentEl } = this; - contentEl.empty(); - } -} - -class IconFolderPlugin extends obsidian.Plugin { - constructor() { - super(...arguments); - this.registeredFileExplorers = new Set(); - this.modifiedInternalPlugins = []; - this.positionField = buildPositionField(this); - this.frontmatterCache = new Set(); - } - onload() { - return __awaiter(this, void 0, void 0, function* () { - console.log(`loading ${config.PLUGIN_NAME}`); - // Registers all modified internal plugins. - // Only adds star plugin for obsidian under v0.12.6. - if (!obsidian.requireApiVersion('0.12.6')) { - this.modifiedInternalPlugins.push(new StarredInternalPlugin(this)); - } - else if (obsidian.requireApiVersion('1.2.0')) { - this.modifiedInternalPlugins.push(new BookmarkInternalPlugin(this)); - } - yield this.loadIconFolderData(); - logger.toggleLogging(this.getSettings().debugMode); - setPath(this.getSettings().iconPacksPath); - yield createDefaultDirectory(this); - yield this.checkRecentlyUsedIcons(); - yield migrate(this); - const usedIconNames = icon.getAllWithPath(this).map((value) => value.icon); - yield loadUsedIcons(this, usedIconNames); - this.app.workspace.onLayoutReady(() => this.handleChangeLayout()); - this.addCommand({ - id: 'iconize:set-icon-for-file', - name: 'Set icon for file', - hotkeys: [ - { - modifiers: ['Mod', 'Shift'], - key: 'j', - }, - ], - editorCallback: (editor) => __awaiter(this, void 0, void 0, function* () { - var _a; - const file = (_a = editor.editorComponent) === null || _a === void 0 ? void 0 : _a.file; - if (!file) { - logger.warn(`'editor.editorComponent?.file' is undefined for file: ${file}`); - return; - } - const modal = new IconsPickerModal(this.app, this, file.path); - modal.open(); - modal.onSelect = (iconName) => { - IconCache.getInstance().set(file.path, { - iconNameWithPrefix: iconName, - }); - // Update icon in tab when setting is enabled. - if (this.getSettings().iconInTabsEnabled) { - const tabLeaves = iconTabs.getTabLeavesOfFilePath(this, file.path); - for (const tabLeaf of tabLeaves) { - iconTabs.update(this, iconName, tabLeaf.tabHeaderInnerIconEl); - } - } - // Update icon in title when setting is enabled. - if (this.getSettings().iconInTitleEnabled) { - this.addIconInTitle(iconName); - } - }; - }), - }); - this.registerEvent( - // Registering file menu event for listening to file pinning and unpinning. - this.app.workspace.on('file-menu', (menu, file) => { - // I've researched other ways of doing this. However, there is no other way to listen to file pinning and unpinning. - menu.onHide(() => { - const path = file.path; - if (this.getSettings().iconInTabsEnabled) { - for (const openedFile of getAllOpenedFiles(this)) { - if (openedFile.path === path) { - const possibleIcon = IconCache.getInstance().get(path); - if (!possibleIcon) { - return; - } - const tabLeaves = iconTabs.getTabLeavesOfFilePath(this, file.path); - for (const tabLeaf of tabLeaves) { - // Add timeout to ensure that the default icon is already set. - setTimeout(() => { - iconTabs.add(this, file, tabLeaf.tabHeaderInnerIconEl); - }, 5); - } - } - } - } - }); - })); - this.registerEvent(this.app.workspace.on('layout-change', () => this.handleChangeLayout())); - this.registerEvent(this.app.workspace.on('file-menu', (menu, file) => { - const addIconMenuItem = (item) => { - item.setTitle('Change icon'); - item.setIcon('hashtag'); - item.onClick(() => { - const modal = new IconsPickerModal(this.app, this, file.path); - modal.open(); - modal.onSelect = (iconName) => { - IconCache.getInstance().set(file.path, { - iconNameWithPrefix: iconName, - }); - // Update icon in tab when setting is enabled. - if (this.getSettings().iconInTabsEnabled) { - const tabLeaves = iconTabs.getTabLeavesOfFilePath(this, file.path); - for (const tabLeaf of tabLeaves) { - iconTabs.update(this, iconName, tabLeaf.tabHeaderInnerIconEl); - } - } - // Update icon in title when setting is enabled. - if (this.getSettings().iconInTitleEnabled) { - this.addIconInTitle(iconName); - } - }; - }); - }; - const removeIconMenuItem = (item) => { - item.setTitle('Remove icon'); - item.setIcon('trash'); - item.onClick(() => __awaiter(this, void 0, void 0, function* () { - yield this.removeSingleIcon(file); - })); - }; - const changeColorOfIcon = (item) => { - item.setTitle('Change color of icon'); - item.setIcon('palette'); - item.onClick(() => { - const modal = new ChangeColorModal(this.app, this, file.path); - modal.open(); - }); - }; - menu.addItem(addIconMenuItem); - const filePathData = this.getData()[file.path]; - const hasNestedIcon = typeof filePathData === 'object' && - filePathData.iconName !== null; - // Only add remove icon menu item when the file path exists in the data. - // We do not want to show this menu item for e.g. custom rules. - if (filePathData && - (typeof filePathData === 'string' || hasNestedIcon)) { - const icon = typeof filePathData === 'string' - ? filePathData - : filePathData.iconName; - if (!emoji.isEmoji(icon)) { - menu.addItem(changeColorOfIcon); - } - menu.addItem(removeIconMenuItem); - } - })); - // deleting event - this.registerEvent(this.app.vault.on('delete', (file) => { - const path = file.path; - this.removeFolderIcon(path); - })); - // renaming event - this.registerEvent(this.app.vault.on('rename', (file, oldPath) => { - // Check if the file was moved and had an icon before. - const dataPoint = this.data[oldPath]; - if (dataPoint && oldPath !== 'settings') { - const iconNameWithPrefix = typeof dataPoint === 'object' - ? dataPoint.iconName - : dataPoint; - dom.createIconNode(this, file.path, iconNameWithPrefix); - } - this.renameFolder(file.path, oldPath); - })); - if (this.getSettings().iconsInNotesEnabled) { - this.registerMarkdownPostProcessor((el) => processIconInTextMarkdown(this, el)); - this.registerEditorSuggest(new SuggestionIcon(this.app, this)); - this.registerEditorExtension([ - this.positionField, - buildIconInTextPlugin(this), - ]); - } - if (this.getSettings().iconsInLinksEnabled) { - this.registerMarkdownPostProcessor((el, ctx) => processIconInLinkMarkdown(this, el, ctx)); - this.registerEditorExtension([ - this.positionField, - buildIconInLinksPlugin(this), - ]); - } - this.addSettingTab(new IconFolderSettings(this.app, this)); - }); - } - notifyPlugins() { - this.modifiedInternalPlugins.forEach((internalPlugin) => { - if (internalPlugin.enabled) { - internalPlugin.onMount(); - } - }); - } - removeSingleIcon(file) { - return __awaiter(this, void 0, void 0, function* () { - this.removeFolderIcon(file.path); - dom.removeIconInPath(file.path); - IconCache.getInstance().invalidate(file.path); - this.notifyPlugins(); - let didUpdate = false; - // Refreshes the icon tab and title icon for custom rules. - for (const rule of customRule.getSortedRules(this)) { - const applicable = yield customRule.isApplicable(this, rule, file); - if (applicable) { - customRule.add(this, rule, file); - this.addIconInTitle(rule.icon); - const tabLeaves = iconTabs.getTabLeavesOfFilePath(this, file.path); - for (const tabLeaf of tabLeaves) { - iconTabs.add(this, file, tabLeaf.tabHeaderInnerIconEl, { - iconName: rule.icon, - }); - } - didUpdate = true; - break; - } - } - // Only remove icon above titles and icon in tabs if no custom rule was found. - if (!didUpdate) { - // Refreshes icons above title and icons in tabs. - for (const openedFile of getAllOpenedFiles(this)) { - if (this.getSettings().iconInTitleEnabled) { - titleIcon.remove(openedFile.leaf.view.inlineTitleEl); - } - if (this.getSettings().iconInTabsEnabled) { - const leaf = openedFile.leaf; - iconTabs.remove(leaf.tabHeaderInnerIconEl, { - replaceWithDefaultIcon: true, - }); - } - } - } - }); - } - handleChangeLayout() { - // Transform data that are objects to single strings. - const data = Object.entries(this.data); - this.modifiedInternalPlugins.forEach((internalPlugin) => { - if (internalPlugin.enabled) { - internalPlugin.onMount(); - internalPlugin.register(); - } - }); - icon.addAll(this, data, this.registeredFileExplorers, () => { - // After initialization of the icon packs, checks the vault for missing icons and - // adds them. - initIconPacks(this).then(() => __awaiter(this, void 0, void 0, function* () { - if (this.getSettings().iconsBackgroundCheckEnabled) { - const data = Object.entries(this.data); - yield icon.checkMissingIcons(this, data); - resetPreloadedIcons(); - } - })); - if (this.getSettings().iconInFrontmatterEnabled) { - const activeFile = this.app.workspace.getActiveFile(); - if (activeFile) { - this.frontmatterCache.add(activeFile.path); - } - } - // Adds the title icon to the active leaf view. - if (this.getSettings().iconInTitleEnabled) { - for (const openedFile of getAllOpenedFiles(this)) { - const iconName = icon.getByPath(this, openedFile.path); - const activeView = openedFile.leaf.view; - if (activeView instanceof obsidian.MarkdownView && iconName) { - let possibleIcon = iconName; - if (!emoji.isEmoji(iconName)) { - const iconNextIdentifier = nextIdentifier(iconName); - possibleIcon = getSvgFromLoadedIcon(iconName.substring(0, iconNextIdentifier), iconName.substring(iconNextIdentifier)); - } - if (possibleIcon) { - titleIcon.add(this, activeView.inlineTitleEl, possibleIcon, { - fontSize: calculateInlineTitleSize(), - }); - } - } - } - } - // Register rename event for adding icons with custom rules to the DOM - // when file was moved to another directory. - this.registerEvent(this.app.vault.on('rename', (file, oldPath) => __awaiter(this, void 0, void 0, function* () { - const sortedRules = customRule.getSortedRules(this); - // Removes possible icons from the renamed file. - sortedRules.forEach((rule) => { - if (customRule.doesMatchPath(rule, oldPath)) { - dom.removeIconInPath(file.path); - } - }); - // Adds possible icons to the renamed file. - sortedRules.forEach((rule) => { - if (customRule.doesMatchPath(rule, oldPath)) { - return; - } - customRule.add(this, rule, file, undefined); - }); - // Updates icon tabs for the renamed file. - for (const rule of customRule.getSortedRules(this)) { - const applicable = yield customRule.isApplicable(this, rule, file); - if (!applicable) { - continue; - } - const openedFiles = getAllOpenedFiles(this); - const openedFile = openedFiles.find((openedFile) => openedFile.path === file.path); - if (openedFile) { - const leaf = openedFile.leaf; - iconTabs.update(this, rule.icon, leaf.tabHeaderInnerIconEl); - } - break; - } - }))); - // Register `layout-change` event for adding icons to tabs when moving a pane or - // enabling reading mode. - this.registerEvent(this.app.workspace.on('layout-change', () => { - var _a, _b; - if (this.getSettings().iconInTitleEnabled) { - const activeView = this.app.workspace.getActiveViewOfType(obsidian.MarkdownView); - if (activeView) { - const file = activeView.file; - const view = activeView.leaf.view.currentMode - .view; - const iconNameWithPrefix = icon.getByPath(this, file.path); - if (!iconNameWithPrefix) { - titleIcon.hide(view.inlineTitleEl); - return; - } - let foundIcon = iconNameWithPrefix; - if (!emoji.isEmoji(foundIcon)) { - foundIcon = (_a = icon.getIconByName(iconNameWithPrefix)) === null || _a === void 0 ? void 0 : _a.svgElement; - // Check for preloaded icons if no icon was found when the start up was faster - // than the loading of the icons. - if (!foundIcon && getPreloadedIcons().length > 0) { - foundIcon = (_b = getPreloadedIcons().find((icon) => icon.prefix + icon.name === iconNameWithPrefix)) === null || _b === void 0 ? void 0 : _b.svgElement; - } - } - if (foundIcon) { - // Removes the node because the editor markdown content is being rerendered - // when the content mode changes back to editing. - titleIcon.remove(view.inlineTitleEl); - titleIcon.add(this, view.inlineTitleEl, foundIcon, { - fontSize: calculateInlineTitleSize(), - }); - } - } - } - if (!this.getSettings().iconInTabsEnabled) { - return; - } - for (const openedFile of getAllOpenedFiles(this)) { - const leaf = openedFile.leaf; - const iconColor = this.getIconColor(leaf.view.file.path); - iconTabs.add(this, openedFile, leaf.tabHeaderInnerIconEl, { - iconColor, - }); - } - })); - // Register `file-open` event for adding icon to title. - this.registerEvent(this.app.workspace.on('file-open', (file) => { - var _a, _b; - if (!this.getSettings().iconInTitleEnabled) { - return; - } - for (const openedFile of getAllOpenedFiles(this)) { - if (openedFile.path !== file.path) { - continue; - } - const leaf = openedFile.leaf.view; - const iconNameWithPrefix = icon.getByPath(this, file.path); - if (!iconNameWithPrefix) { - titleIcon.hide(leaf.inlineTitleEl); - return; - } - let foundIcon = iconNameWithPrefix; - if (!emoji.isEmoji(foundIcon)) { - foundIcon = (_a = icon.getIconByName(iconNameWithPrefix)) === null || _a === void 0 ? void 0 : _a.svgElement; - // Check for preloaded icons if no icon was found when the start up was faster - // than the loading of the icons. - if (!foundIcon && getPreloadedIcons().length > 0) { - foundIcon = (_b = getPreloadedIcons().find((icon) => icon.prefix + icon.name === iconNameWithPrefix)) === null || _b === void 0 ? void 0 : _b.svgElement; - } - } - if (foundIcon) { - titleIcon.add(this, leaf.inlineTitleEl, foundIcon, { - fontSize: calculateInlineTitleSize(), - }); - } - else { - titleIcon.hide(leaf.inlineTitleEl); - } - } - })); - // Register event for frontmatter icon registration. - this.registerEvent(this.app.metadataCache.on('resolve', (file) => __awaiter(this, void 0, void 0, function* () { - if (!this.getSettings().iconInFrontmatterEnabled) { - return; - } - const fileCache = this.app.metadataCache.getFileCache(file); - const iconFrontmatterName = this.getSettings().iconInFrontmatterFieldName; - const iconColorFrontmatterName = this.getSettings().iconColorInFrontmatterFieldName; - if (fileCache === null || fileCache === void 0 ? void 0 : fileCache.frontmatter) { - const { [iconFrontmatterName]: newIconName, [iconColorFrontmatterName]: newIconColor, } = fileCache.frontmatter; - // If `icon` property is empty, we will remove it from the data and remove the icon. - if (!newIconName) { - if (this.frontmatterCache.has(file.path)) { - yield this.removeSingleIcon(file); - this.frontmatterCache.delete(file.path); - } - return; - } - if (typeof newIconName !== 'string') { - new obsidian.Notice(`[${config.PLUGIN_NAME}] Frontmatter property type \`icon\` has to be of type \`text\`.`); - return; - } - if (newIconColor && typeof newIconColor !== 'string') { - new obsidian.Notice(`[${config.PLUGIN_NAME}] Frontmatter property type \`iconColor\` has to be of type \`text\`.`); - return; - } - let iconColor = newIconColor; - if (isHexadecimal(iconColor)) { - iconColor = stringToHex(iconColor); - } - const cachedIcon = IconCache.getInstance().get(file.path); - if (newIconName === (cachedIcon === null || cachedIcon === void 0 ? void 0 : cachedIcon.iconNameWithPrefix) && - iconColor === (cachedIcon === null || cachedIcon === void 0 ? void 0 : cachedIcon.iconColor)) { - return; - } - this.frontmatterCache.add(file.path); - try { - if (!emoji.isEmoji(newIconName)) { - saveIconToIconPack(this, newIconName); - } - } - catch (e) { - logger.warn(`Something went wrong while saving icon to icon pack (error: ${e})`); - new obsidian.Notice(e.message); - return; - } - dom.createIconNode(this, file.path, newIconName, { - color: iconColor, - }); - this.addFolderIcon(file.path, newIconName); - this.addIconColor(file.path, iconColor); - IconCache.getInstance().set(file.path, { - iconNameWithPrefix: newIconName, - iconColor, - }); - // Update icon in tab when setting is enabled. - if (this.getSettings().iconInTabsEnabled) { - const tabLeaves = iconTabs.getTabLeavesOfFilePath(this, file.path); - for (const tabLeaf of tabLeaves) { - iconTabs.update(this, newIconName, tabLeaf.tabHeaderInnerIconEl); - } - } - // Update icon in title when setting is enabled. - if (this.getSettings().iconInTitleEnabled) { - this.addIconInTitle(newIconName); - } - } - }))); - // Register active leaf change event for adding icon of file to tab. - this.registerEvent(this.app.workspace.on('active-leaf-change', (leaf) => { - if (!this.getSettings().iconInTabsEnabled) { - return; - } - // TODO: Maybe change in the future to a more optimal solution. - // Fixes a problem when the file was clicked twice in the same tab. - // See https://github.com/FlorianWoelki/obsidian-iconize/issues/208. - if (leaf.view.getViewType() === 'file-explorer') { - for (const openedFile of getAllOpenedFiles(this)) { - const leaf = openedFile.leaf; - const iconColor = this.getIconColor(leaf.view.file.path); - iconTabs.add(this, openedFile, leaf.tabHeaderInnerIconEl, { - iconColor, - }); - } - return; - } - if (leaf.view.getViewType() !== 'markdown') { - return; - } - const tabHeaderLeaf = leaf; - if (tabHeaderLeaf.view.file) { - const iconColor = this.getIconColor(tabHeaderLeaf.view.file.path); - iconTabs.add(this, tabHeaderLeaf.view.file, tabHeaderLeaf.tabHeaderInnerIconEl, { - iconColor, - }); - } - })); - this.registerEvent(this.app.workspace.on('css-change', () => { - for (const openedFile of getAllOpenedFiles(this)) { - const activeView = openedFile.leaf.view; - if (activeView instanceof obsidian.MarkdownView) { - titleIcon.updateStyle(activeView.inlineTitleEl, { - fontSize: calculateInlineTitleSize(), - }); - } - } - })); - }); - } - addIconInTitle(iconName) { - var _a; - for (const openedFile of getAllOpenedFiles(this)) { - const activeView = openedFile.leaf.view; - if (activeView instanceof obsidian.MarkdownView) { - let possibleIcon = iconName; - if (!emoji.isEmoji(iconName)) { - possibleIcon = (_a = icon.getIconByName(iconName)) === null || _a === void 0 ? void 0 : _a.svgElement; - } - if (possibleIcon) { - titleIcon.add(this, activeView.inlineTitleEl, possibleIcon, { - fontSize: calculateInlineTitleSize(), - }); - } - } - } - } - onunload() { - console.log('unloading obsidian-icon-folder'); - } - renameFolder(newPath, oldPath) { - if (!this.data[oldPath] || newPath === oldPath) { - return; - } - Object.defineProperty(this.data, newPath, Object.getOwnPropertyDescriptor(this.data, oldPath)); - delete this.data[oldPath]; - this.saveIconFolderData(); - } - addIconColor(path, iconColor) { - const pathData = this.getData()[path]; - if (typeof pathData === 'string') { - this.getData()[path] = { - iconName: pathData, - iconColor, - }; - } - else { - pathData.iconColor = iconColor; - } - this.saveIconFolderData(); - } - getIconColor(path) { - const pathData = this.getData()[path]; - if (!pathData) { - return undefined; - } - if (typeof pathData === 'string') { - return undefined; - } - return pathData.iconColor; - } - removeIconColor(path) { - const pathData = this.getData()[path]; - if (typeof pathData === 'string') { - return; - } - const currentValue = pathData; - this.getData()[path] = currentValue.iconName; - this.saveIconFolderData(); - } - removeFolderIcon(path) { - if (!this.data[path]) { - return; - } - // Saves the icon name with prefix to remove it from the icon pack directory later. - const iconData = this.data[path]; - delete this.data[path]; - // Removes the icon from the icon pack directory if it is not used as an icon somewhere - // else. - if (iconData) { - let iconNameWithPrefix = iconData; - if (typeof iconData === 'object') { - iconNameWithPrefix = iconData.iconName; - } - else { - iconNameWithPrefix = iconData; - } - if (!emoji.isEmoji(iconNameWithPrefix)) { - removeIconFromIconPack(this, iconNameWithPrefix); - } - } - //this.addIconsToSearch(); - this.saveIconFolderData(); - } - addFolderIcon(path, icon) { - const iconName = getNormalizedName(typeof icon === 'object' ? icon.displayName : icon); - this.data[path] = iconName; - // Update recently used icons. - if (!this.getSettings().recentlyUsedIcons.includes(iconName)) { - if (this.getSettings().recentlyUsedIcons.length >= - this.getSettings().recentlyUsedIconsSize) { - this.getSettings().recentlyUsedIcons = - this.getSettings().recentlyUsedIcons.slice(0, this.getSettings().recentlyUsedIconsSize - 1); - } - this.getSettings().recentlyUsedIcons.unshift(iconName); - this.checkRecentlyUsedIcons(); - } - //this.addIconsToSearch(); - this.saveIconFolderData(); - } - getSettings() { - return this.data.settings; - } - loadIconFolderData() { - return __awaiter(this, void 0, void 0, function* () { - const data = yield this.loadData(); - if (data) { - Object.entries(DEFAULT_SETTINGS).forEach(([k, v]) => { - if (data.settings[k] === undefined) { - data.settings[k] = v; - } - }); - } - this.data = Object.assign({ settings: Object.assign({}, DEFAULT_SETTINGS) }, {}, data); - }); - } - saveIconFolderData() { - return __awaiter(this, void 0, void 0, function* () { - yield this.saveData(this.data); - }); - } - checkRecentlyUsedIcons() { - return __awaiter(this, void 0, void 0, function* () { - if (this.getSettings().recentlyUsedIcons.length > - this.getSettings().recentlyUsedIconsSize) { - this.getSettings().recentlyUsedIcons = - this.getSettings().recentlyUsedIcons.slice(0, this.getSettings().recentlyUsedIconsSize); - yield this.saveIconFolderData(); - } - }); - } - getData() { - return this.data; - } - getIconNameFromPath(path) { - if (typeof this.getData()[path] === 'object') { - return this.getData()[path].iconName; - } - return this.getData()[path]; - } - getRegisteredFileExplorers() { - return this.registeredFileExplorers; - } - /** - * Returns a possible data path by the given value. This function checks for - * direct icon and custom rules. - * @param value String that will be used to find the data path. - * @returns String that is the data path or `undefined` if no data path was found. - */ - getDataPathByValue(value) { - return Object.entries(this.data).find(([k, v]) => { - if (typeof v === 'string') { - if (value === v) { - return k; - } - } - else if (typeof v === 'object') { - // Check for custom rules. - if (k === 'settings') { - // `rules` are defined in the settings object. - const rules = v.rules; - return rules.find((rule) => rule.icon === value); - } - v = v; - if (value === v.iconName) { - return k; - } - } - }); - } -} - -module.exports = IconFolderPlugin; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZXMiOlsibm9kZV9tb2R1bGVzLy5wbnBtL0Byb2xsdXArcGx1Z2luLXR5cGVzY3JpcHRAMTEuMS42X3JvbGx1cEAyLjc5LjFfdHNsaWJAMi42LjJfdHlwZXNjcmlwdEA1LjQuMi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIiwic3JjL2xpYi91dGlsL3N2Zy50cyIsIm5vZGVfbW9kdWxlcy8ucG5wbS9qc3ppcEAzLjEwLjEvbm9kZV9tb2R1bGVzL2pzemlwL2Rpc3QvanN6aXAubWluLmpzIiwic3JjL3ppcC11dGlsLnRzIiwic3JjL2NvbmZpZy9pbmRleC50cyIsInNyYy9saWIvbG9nZ2VyLnRzIiwic3JjL2ljb24tcGFja3MudHMiLCJzcmMvaWNvbi1wYWNrLW1hbmFnZXIudHMiLCJub2RlX21vZHVsZXMvLnBucG0vQHR3ZW1vamkrYXBpQDE1LjEuMC9ub2RlX21vZHVsZXMvQHR3ZW1vamkvYXBpL2Rpc3QvdHdlbW9qaS5lc20uanMiLCJzcmMvZW1vamkudHMiLCJzcmMvdXRpbC50cyIsInNyYy9saWIvdXRpbC9zdHlsZS50cyIsInNyYy9saWIvdXRpbC9kb20udHMiLCJzcmMvdWkvaWNvbnMtcGlja2VyLW1vZGFsLnRzIiwic3JjL3NldHRpbmdzL2RhdGEudHMiLCJzcmMvbWlncmF0aW9ucy8wMDAxLWNoYW5nZS1taWdyYXRlZC10cnVlLXRvLTEudHMiLCJzcmMvbWlncmF0aW9ucy8wMDAyLW9yZGVyLWN1c3RvbS1ydWxlcy50cyIsInNyYy9saWIvaWNvbi1jYWNoZS50cyIsInNyYy9saWIvY3VzdG9tLXJ1bGUudHMiLCJzcmMvbWlncmF0aW9ucy8wMDAzLWluaGVyaXRhbmNlLXRvLWN1c3RvbS1ydWxlLnRzIiwic3JjL21pZ3JhdGlvbnMvMDAwNC1yZW1vdmUtbm9uZS1lbW9qaS1vcHRpb24udHMiLCJzcmMvbWlncmF0aW9ucy9pbmRleC50cyIsInNyYy9zZXR0aW5ncy91aS9pY29uRm9sZGVyU2V0dGluZy50cyIsInNyYy9zZXR0aW5ncy91aS9jdXN0b21JY29uUGFjay50cyIsInNyYy9saWIvaWNvbi10YWJzLnRzIiwic3JjL3NldHRpbmdzL3VpL2N1c3RvbUljb25SdWxlLnRzIiwic3JjL2xpYi9pY29uLXRpdGxlLnRzIiwic3JjL2xpYi91dGlsL3RleHQudHMiLCJzcmMvc2V0dGluZ3MvdWkvZW1vamlTdHlsZS50cyIsInNyYy9zZXR0aW5ncy9oZWxwZXIudHMiLCJzcmMvc2V0dGluZ3MvdWkvZXh0cmFNYXJnaW4udHMiLCJzcmMvc2V0dGluZ3MvdWkvaWNvbkNvbG9yLnRzIiwic3JjL3NldHRpbmdzL3VpL2ljb25Gb250U2l6ZS50cyIsInNyYy9zZXR0aW5ncy91aS9pY29uUGFja3NQYXRoLnRzIiwic3JjL3NldHRpbmdzL3VpL2ljb25QYWNrc0JhY2tncm91bmRDaGVja2VyLnRzIiwic3JjL3VpL2ljb24tcGFjay1icm93c2VyLW1vZGFsLnRzIiwic3JjL3NldHRpbmdzL3VpL3ByZWRlZmluZWRJY29uUGFja3MudHMiLCJzcmMvc2V0dGluZ3MvdWkvcmVjZW50bHlVc2VkSWNvbnMudHMiLCJzcmMvc2V0dGluZ3MvdWkvdG9nZ2xlSWNvbkluVGFicy50cyIsInNyYy9saWIvaWNvbi50cyIsInNyYy9zZXR0aW5ncy91aS90b2dnbGVJY29uSW5UaXRsZS50cyIsInNyYy9zZXR0aW5ncy91aS9mcm9udG1hdHRlck9wdGlvbnMudHMiLCJzcmMvc2V0dGluZ3MvdWkvdG9nZ2xlSWNvbnNJbk5vdGVzLnRzIiwic3JjL3NldHRpbmdzL3VpL3RvZ2dsZUljb25zSW5MaW5rcy50cyIsInNyYy9zZXR0aW5ncy91aS9pY29uSWRlbnRpZmllci50cyIsInNyYy9zZXR0aW5ncy91aS9kZWJ1Z01vZGUudHMiLCJzcmMvc2V0dGluZ3MvdWkvaW5kZXgudHMiLCJub2RlX21vZHVsZXMvLnBucG0vbW9ua2V5LWFyb3VuZEAyLjMuMC9ub2RlX21vZHVsZXMvbW9ua2V5LWFyb3VuZC9tanMvaW5kZXguanMiLCJzcmMvQHR5cGVzL2ludGVybmFsLXBsdWdpbi1pbmplY3Rvci50cyIsInNyYy9pbnRlcm5hbC1wbHVnaW5zL3N0YXJyZWQudHMiLCJzcmMvaW50ZXJuYWwtcGx1Z2lucy9ib29rbWFyay50cyIsInNyYy9lZGl0b3IvaWNvbnMtc3VnZ2VzdGlvbi50cyIsInNyYy9lZGl0b3IvbGl2ZS1wcmV2aWV3L3dpZGdldHMvaWNvbi1pbi10ZXh0LnRzIiwic3JjL2VkaXRvci9saXZlLXByZXZpZXcvd2lkZ2V0cy9pY29uLWluLWxpbmsudHMiLCJzcmMvZWRpdG9yL2xpdmUtcHJldmlldy9kZWNvcmF0aW9ucy9idWlsZC1saW5rLWRlY29yYXRpb25zLnRzIiwic3JjL2VkaXRvci9saXZlLXByZXZpZXcvZGVjb3JhdGlvbnMvYnVpbGQtdGV4dC1kZWNvcmF0aW9ucy50cyIsInNyYy9lZGl0b3IvbGl2ZS1wcmV2aWV3L3BsdWdpbnMvaWNvbi1pbi10ZXh0LnRzIiwic3JjL2VkaXRvci9saXZlLXByZXZpZXcvcGx1Z2lucy9pY29uLWluLWxpbmtzLnRzIiwic3JjL2VkaXRvci9saXZlLXByZXZpZXcvc3RhdGUudHMiLCJzcmMvZWRpdG9yL21hcmtkb3duLXByb2Nlc3NvcnMvaWNvbi1pbi10ZXh0LnRzIiwic3JjL2VkaXRvci9tYXJrZG93bi1wcm9jZXNzb3JzL2ljb24taW4tbGluay50cyIsInNyYy91aS9jaGFuZ2UtY29sb3ItbW9kYWwudHMiLCJzcmMvbWFpbi50cyJdLCJzb3VyY2VzQ29udGVudCI6bnVsbCwibmFtZXMiOlsicmVxdWlyZSIsImdsb2JhbCIsInJlcXVlc3RVcmwiLCJsb2FkQXN5bmMiLCJpY29uUGFja3MiLCJOb3RpY2UiLCJGdXp6eVN1Z2dlc3RNb2RhbCIsIm1pZ3JhdGUiLCJhZGQiLCJtaWdyYXRlMDAwMSIsIm1pZ3JhdGUwMDAyIiwibWlncmF0ZTAwMDMiLCJtaWdyYXRlMDAwNCIsIlNldHRpbmciLCJyZW1vdmUiLCJNb2RhbCIsIlRleHRDb21wb25lbnQiLCJUb2dnbGVDb21wb25lbnQiLCJCdXR0b25Db21wb25lbnQiLCJDb2xvckNvbXBvbmVudCIsIk1hcmtkb3duVmlldyIsIkRyb3Bkb3duQ29tcG9uZW50IiwiU2xpZGVyQ29tcG9uZW50IiwiUGx1Z2luU2V0dGluZ1RhYiIsIlRvZ2dsZUljb25zSW5Ob3RlcyIsIkVkaXRvclN1Z2dlc3QiLCJXaWRnZXRUeXBlIiwidmlldyIsIlJhbmdlU2V0QnVpbGRlciIsImVkaXRvckluZm9GaWVsZCIsInN5bnRheFRyZWUiLCJ0b2tlbkNsYXNzTm9kZVByb3AiLCJEZWNvcmF0aW9uIiwiZWRpdG9yTGl2ZVByZXZpZXdGaWVsZCIsIlZpZXdQbHVnaW4iLCJFZGl0b3JWaWV3IiwiUmFuZ2VWYWx1ZSIsIlN0YXRlRmllbGQiLCJzdGF0ZSIsIlBsdWdpbiIsInJlcXVpcmVBcGlWZXJzaW9uIiwiSWNvbkZvbGRlclNldHRpbmdzVUkiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFvR0E7QUFDTyxTQUFTLFNBQVMsQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUU7QUFDN0QsSUFBSSxTQUFTLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxPQUFPLEtBQUssWUFBWSxDQUFDLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLFVBQVUsT0FBTyxFQUFFLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUU7QUFDaEgsSUFBSSxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxPQUFPLENBQUMsRUFBRSxVQUFVLE9BQU8sRUFBRSxNQUFNLEVBQUU7QUFDL0QsUUFBUSxTQUFTLFNBQVMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO0FBQ25HLFFBQVEsU0FBUyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO0FBQ3RHLFFBQVEsU0FBUyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsTUFBTSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFO0FBQ3RILFFBQVEsSUFBSSxDQUFDLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLFVBQVUsSUFBSSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQzlFLEtBQUssQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQWdNRDtBQUN1QixPQUFPLGVBQWUsS0FBSyxVQUFVLEdBQUcsZUFBZSxHQUFHLFVBQVUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUU7QUFDdkgsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUMvQixJQUFJLE9BQU8sQ0FBQyxDQUFDLElBQUksR0FBRyxpQkFBaUIsRUFBRSxDQUFDLENBQUMsS0FBSyxHQUFHLEtBQUssRUFBRSxDQUFDLENBQUMsVUFBVSxHQUFHLFVBQVUsRUFBRSxDQUFDLENBQUM7QUFDckY7O0FDOVRBO0FBQ0E7QUFFQTs7Ozs7QUFLRztBQUNILE1BQU0sT0FBTyxHQUFHLENBQUMsU0FBaUIsS0FBWTs7O0lBRTVDLFNBQVMsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3BELFNBQVMsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQzs7QUFHL0MsSUFBQSxNQUFNLE1BQU0sR0FBRyxJQUFJLFNBQVMsRUFBRSxDQUFDO0lBQy9CLE1BQU0sR0FBRyxHQUFHLE1BQU07QUFDZixTQUFBLGVBQWUsQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDO1NBQ3ZDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQzs7QUFHeEIsSUFBQSxJQUFJLEdBQUcsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEVBQUU7QUFDN0IsUUFBQSxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDckIsUUFBQSxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7S0FDdkI7O0lBR0QsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7QUFDdkUsUUFBQSxNQUFNLEtBQUssR0FBRyxDQUFBLEVBQUEsR0FBQSxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLE1BQUksSUFBQSxJQUFBLEVBQUEsS0FBQSxLQUFBLENBQUEsR0FBQSxFQUFBLEdBQUEsRUFBRSxDQUFDO0FBQzVDLFFBQUEsTUFBTSxNQUFNLEdBQUcsQ0FBQSxFQUFBLEdBQUEsR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxNQUFJLElBQUEsSUFBQSxFQUFBLEtBQUEsS0FBQSxDQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUUsQ0FBQztRQUM5QyxHQUFHLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ2xDLEdBQUcsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7S0FDckM7SUFFRCxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUM3QixRQUFBLEdBQUcsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0tBQzFDO0lBRUQsTUFBTSxhQUFhLEdBQUcsR0FBRyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNqRCxJQUFJLGFBQWEsRUFBRTtRQUNqQixhQUFhLENBQUMsTUFBTSxFQUFFLENBQUM7S0FDeEI7QUFFRCxJQUFBLEdBQUcsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ2xDLElBQUEsR0FBRyxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFFbkMsT0FBTyxHQUFHLENBQUMsU0FBUyxDQUFDO0FBQ3ZCLENBQUMsQ0FBQztBQUVGOzs7Ozs7QUFNRztBQUNILE1BQU0sV0FBVyxHQUFHLENBQUMsU0FBaUIsRUFBRSxRQUFnQixLQUFZO0FBQ2xFLElBQUEsTUFBTSxPQUFPLEdBQUcsSUFBSSxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQztBQUNsRCxJQUFBLE1BQU0sUUFBUSxHQUFHLElBQUksTUFBTSxDQUFDLHNCQUFzQixDQUFDLENBQUM7QUFDcEQsSUFBQSxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDNUIsU0FBUyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQVUsT0FBQSxFQUFBLFFBQVEsQ0FBSyxHQUFBLENBQUEsQ0FBQyxDQUFDO0tBQ2pFO0FBQ0QsSUFBQSxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUU7UUFDN0IsU0FBUyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQVcsUUFBQSxFQUFBLFFBQVEsQ0FBSyxHQUFBLENBQUEsQ0FBQyxDQUFDO0tBQ25FO0FBQ0QsSUFBQSxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDLENBQUM7QUFFRjs7Ozs7QUFLRztBQUNILE1BQU0sUUFBUSxHQUFHLENBQ2YsU0FBaUIsRUFDakIsS0FBZ0MsS0FDdEI7SUFDVixJQUFJLENBQUMsS0FBSyxFQUFFO1FBQ1YsS0FBSyxHQUFHLGNBQWMsQ0FBQztLQUN4QjtBQUVELElBQUEsTUFBTSxNQUFNLEdBQUcsSUFBSSxTQUFTLEVBQUUsQ0FBQzs7SUFFL0IsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDbEUsTUFBTSxHQUFHLEdBQUcsVUFBVSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUU1QyxJQUFJLEdBQUcsRUFBRTtBQUNQLFFBQUEsSUFBSSxHQUFHLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEtBQUssTUFBTSxFQUFFO0FBQ25FLFlBQUEsR0FBRyxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDakM7QUFBTSxhQUFBLElBQ0wsR0FBRyxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUM7WUFDMUIsR0FBRyxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsS0FBSyxNQUFNLEVBQ3JDO0FBQ0EsWUFBQSxHQUFHLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztTQUNuQztRQUVELE9BQU8sR0FBRyxDQUFDLFNBQVMsQ0FBQztLQUN0QjtBQUVELElBQUEsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQyxDQUFDO0FBRUYsVUFBZTtJQUNiLE9BQU87SUFDUCxRQUFRO0lBQ1IsV0FBVztDQUNaOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUMvRkQsQ0FBQSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQXlELE1BQWUsQ0FBQSxPQUFBLENBQUEsQ0FBQyxFQUFFLENBQW9MLENBQUMsQ0FBQyxVQUFVLENBQUMsT0FBTyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRSxPQUFPQSxlQUFPLEVBQUVBLGVBQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRSxPQUFPQSxlQUFPLEVBQUVBLGVBQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFjLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxtRUFBbUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsaURBQWlELENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsMkNBQTJDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBYyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsY0FBYyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLENBQUMsMEJBQTBCLENBQUMsRUFBRSxDQUFDLHFCQUFxQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFjLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsd0JBQXdCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQWMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFjLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLEtBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBYyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBYyxJQUFJLENBQUMsQ0FBQyxXQUFXLEVBQUUsT0FBTyxVQUFVLEVBQUUsV0FBVyxFQUFFLE9BQU8sV0FBVyxFQUFFLFdBQVcsRUFBRSxPQUFPLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQWMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLHlCQUF5QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMscUJBQXFCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxPQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxPQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLHlCQUF5QixDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBYyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLEVBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFDLENBQUMsT0FBTyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFjLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLGdHQUFnRyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBYyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsZ0NBQWdDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxzREFBc0QsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLHFCQUFxQixDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFjLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLHlCQUF5QixDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGtDQUFrQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUUsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsT0FBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxPQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLHlCQUF5QixDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQWMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQWMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsT0FBTyxNQUFNLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLDBDQUEwQyxDQUFDLENBQUMsT0FBTyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBRSxFQUFFLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQWMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUMsZUFBZSxHQUFHLENBQUMsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsZUFBZSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU0saUJBQWlCLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLDRFQUE0RSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxD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QUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQWMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFjLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsb0JBQW9CLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLHFCQUFxQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQWMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQ0FBcUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDLG9CQUFvQixDQUFDLFVBQVUsRUFBRSxDQUFDLHFCQUFxQixDQUFDLFVBQVUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQWMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBYyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBYyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQWMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsb0JBQW9CLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBYyxDQUFDLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsK0JBQStCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQywyQkFBMkIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxRQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQWMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBYyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBYyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBYyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLGNBQWMsR0FBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLE9BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxPQUFPLENBQUMsSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFjLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBQyxDQUFDLE9BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsT0FBTSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRSxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQWMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMscUNBQXFDLEVBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLE9BQU8sQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLE9BQU8sS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksWUFBWSxDQUFDLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxHQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxJQUFJLGFBQWEsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLE1BQU0sSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGtDQUFrQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxxQ0FBcUMsQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBYyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLE9BQU8sV0FBVyxFQUFFLFdBQVcsRUFBRSxPQUFPLFVBQVUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxPQUFPLFVBQVUsQ0FBQyxXQUFXLEVBQUUsT0FBTyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLEtBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLEtBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxTQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFjLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxHQUFHLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxHQUFHLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEdBQUcsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEdBQUcsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsd0JBQXdCLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFjLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLGlDQUFpQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEdBQUcsQ0FBQyxFQUFFLFlBQVksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxZQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxZQUFZLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsYUFBYSxDQUFDLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsWUFBWSxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxZQUFZLFdBQVcsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLGVBQWUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsYUFBYSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUMsQ0FBQyw0RUFBNEUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFjLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsOENBQThDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsMEJBQTBCLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLGlDQUFpQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsa0NB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R0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLEdBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQWMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxPQUFPLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsb0lBQW9JLENBQUMsQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBQyxDQUFDLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsb0JBQW9CLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsR0FBRyxDQUFDLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEtBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsS0FBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUMsRUFBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyw0QkFBNEIsRUFBRSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxLQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMseUJBQXlCLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLDRCQUE0QixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFB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QUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssWUFBWSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLG1CQUFtQixFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsT0FBTyxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxPQUFPLElBQUksQ0FBQyxLQUFLLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsNEVBQTRFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLENBQUMsd0JBQXdCLENBQUMsRUFBRSxDQUFDLHVCQUF1QixDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFjLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUMsRUFBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLEVBQUUsb0JBQW9CLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxLQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBQyxFQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUUsRUFBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsT0FBT0MsY0FBTSxDQUFDQSxjQUFNLENBQUMsV0FBVyxFQUFFLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFjLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQyxNQUFNLElBQUksU0FBUyxDQUFDLDZCQUE2QixDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTLENBQUMsb0NBQW9DLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxRQUFRLEVBQUUsT0FBTyxDQUFDLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDLE9BQU8sVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxVQUFVLEVBQUUsT0FBTyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxFQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsWUFBWSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFjLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFHLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsb0JBQW9CLENBQUMsRUFBRSxDQUFDLHNCQUFzQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFjLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLFlBQVksQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxzQkFBc0IsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxzQkFBc0IsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQWMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLFlBQVksQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxzQkFBc0IsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsc0JBQXNCLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsWUFBWSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFjLElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRSxPQUFPLFVBQVUsRUFBRSxXQUFXLEVBQUUsT0FBTyxXQUFXLEVBQUUsV0FBVyxFQUFFLE9BQU8sVUFBVSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLE1BQU0sSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFjLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxHQUFHLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxHQUFHLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssR0FBRyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssR0FBRyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFjLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsTUFBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQWMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQWMsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBYyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLFlBQVksR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsWUFBWSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMscUNBQW9DLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQWMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUMsRUFBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFjLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLDZCQUE2QixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLCtCQUErQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQywrQkFBK0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBQyxDQUFDLEtBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUMsRUFBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFjLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksR0FBRyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEtBQUssRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sS0FBSyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLDBCQUEwQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsMkJBQTJCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLEtBQUssR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLEtBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLDJCQUEyQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLHNDQUFzQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLDZCQUE2QixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsNkJBQTZCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsTUFBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQywrQkFBK0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsK0JBQStCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxPQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLFFBQVEsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxxQ0FBb0MsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBYyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFjLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFjLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQWMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBYyxHQUFHLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLGNBQWMsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsb0JBQW9CLEdBQUcsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsRUFBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMs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LENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTSxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLGdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxNQUFNLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUMsQ0FBQyxLQUFLLEdBQUcsUUFBUSxHQUFHLENBQUMsRUFBRSxFQUFFLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUMsQ0FBQyxDQUFDLE9BQU8sT0FBTyxDQUFDLFNBQVMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxXQUFXLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxNQUFNLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksUUFBUSxJQUFJLE1BQU0sQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSSxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxTQUFTLFdBQVcsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsT0FBTyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxRQUFRLElBQUksTUFBTSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksRUFBQyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLFVBQVUsRUFBRSxDQUFDLE9BQU8sSUFBSSxDQUFDLFNBQVMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxPQUFPLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFNBQVMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sU0FBUyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLE9BQU8sWUFBWSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLE9BQU8sR0FBRyxHQUFHLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUMsQ0FBQyxPQUFNLENBQUMsT0FBTyxJQUFJLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsd0JBQXdCLENBQUMsVUFBVSxDQUFDLE9BQU8sR0FBRyxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsa0JBQWtCLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxN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 diff --git a/.obsidian/plugins/obsidian-icon-folder/manifest.json b/.obsidian/plugins/obsidian-icon-folder/manifest.json deleted file mode 100644 index 55543cc..0000000 --- a/.obsidian/plugins/obsidian-icon-folder/manifest.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "id": "obsidian-icon-folder", - "name": "Iconize", - "version": "2.12.1", - "minAppVersion": "0.9.12", - "description": "Add icons to anything you desire in Obsidian, including files, folders, and text.", - "author": "Florian Woelki", - "authorUrl": "https://florianwoelki.com/", - "isDesktopOnly": false -} diff --git a/.obsidian/plugins/obsidian-icon-folder/styles.css b/.obsidian/plugins/obsidian-icon-folder/styles.css deleted file mode 100644 index a9f2c60..0000000 --- a/.obsidian/plugins/obsidian-icon-folder/styles.css +++ /dev/null @@ -1,118 +0,0 @@ -.iconize-inline-title-wrapper { - width: var(--line-width); - margin-inline: var(--content-margin); -} - -.iconize-title-icon { - max-width: var(--max-width); - margin-right: var(--size-4-2); -} - -.iconize-icon-in-link { - margin-right: var(--size-2-2); - display: inline-flex; -} - -.iconize-icon { - border: 1px solid transparent; - margin: 0px 4px 0px 0px; - display: flex; - align-self: center; - margin: auto 0; -} - -.nav-folder-title, -.nav-file-title { - align-items: center; -} - -.iconize-setting input[type='color'] { - margin: 0 6px; -} - -.iconize-modal.prompt-results { - margin: 0; - overflow-y: auto; - display: grid; - grid-template-columns: repeat(5, minmax(0, 1fr)); -} - -.prompt .iconize-subheadline { - margin-top: 12px; - font-size: 12px; - color: gray; - grid-column-start: 1; - grid-column-end: 6; -} - -@media (max-width: 640px) { - .iconize-modal.prompt-results { - grid-template-columns: repeat(3, minmax(0, 1fr)); - } - .prompt .iconize-subheadline { - grid-column-end: 4; - } -} - -.iconize-modal.prompt-results .suggestion-item { - cursor: pointer; - white-space: pre-wrap; - display: flex; - justify-content: flex-end; - align-items: center; - flex-direction: column-reverse; - text-align: center; - font-size: 13px; - color: var(--text-muted); - padding: 16px 8px; - line-break: auto; - word-break: break-word; - line-height: 1.3; -} - -.iconize-modal.prompt-results .suggestion-item.suggestion-item__center { - justify-content: center; -} - -.iconize-icon-preview { - font-size: 22px; -} - -.iconize-icon-preview img { - width: 16px; - height: 16px; -} - -.iconize-icon-preview svg { - width: 24px; - height: 24px; - color: currentColor; - margin-bottom: 4px; -} - -.iconize-dragover { - position: relative; -} - -.iconize-dragover-el { - position: absolute; - width: 100%; - height: 100%; - color: var(--text-normal); - background-color: var(--background-secondary-alt); - display: flex; - align-items: center; - justify-content: center; -} - -/* Custom rule modal. */ -.iconize-custom-modal .modal-content { - display: flex; - align-items: center; - justify-content: center; -} - -.iconize-custom-modal .modal-content input { - width: 100%; - margin-right: 0.5rem; -} diff --git a/.obsidian/plugins/obsidian-regex-replace/main.js b/.obsidian/plugins/obsidian-regex-replace/main.js deleted file mode 100644 index 3a65c16..0000000 --- a/.obsidian/plugins/obsidian-regex-replace/main.js +++ /dev/null @@ -1,320 +0,0 @@ -/* -THIS IS A GENERATED/BUNDLED FILE BY ROLLUP -if you want to view the source visit the plugins github repository -*/ - -'use strict'; - -var obsidian = require('obsidian'); - -/*! ***************************************************************************** -Copyright (c) Microsoft Corporation. - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM -LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. -***************************************************************************** */ - -function __awaiter(thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -} - -const DEFAULT_SETTINGS = { - findText: '', - replaceText: '', - useRegEx: true, - selOnly: false, - caseInsensitive: false, - processLineBreak: false, - processTab: false, - prefillFind: false -}; -// logThreshold: 0 ... only error messages -// 9 ... verbose output -const logThreshold = 9; -const logger = (logString, logLevel = 0) => { if (logLevel <= logThreshold) - console.log('RegexFiRe: ' + logString); }; -class RegexFindReplacePlugin extends obsidian.Plugin { - onload() { - return __awaiter(this, void 0, void 0, function* () { - logger('Loading Plugin...', 9); - yield this.loadSettings(); - this.addSettingTab(new RegexFindReplaceSettingTab(this.app, this)); - this.addCommand({ - id: 'obsidian-regex-replace', - name: 'Find and Replace using regular expressions', - editorCallback: (editor) => { - new FindAndReplaceModal(this.app, editor, this.settings, this).open(); - }, - }); - }); - } - onunload() { - logger('Bye!', 9); - } - loadSettings() { - return __awaiter(this, void 0, void 0, function* () { - logger('Loading Settings...', 6); - this.settings = Object.assign({}, DEFAULT_SETTINGS, yield this.loadData()); - logger(' findVal: ' + this.settings.findText, 6); - logger(' replaceText: ' + this.settings.replaceText, 6); - logger(' caseInsensitive: ' + this.settings.caseInsensitive, 6); - logger(' processLineBreak: ' + this.settings.processLineBreak, 6); - }); - } - saveSettings() { - return __awaiter(this, void 0, void 0, function* () { - yield this.saveData(this.settings); - }); - } -} -class FindAndReplaceModal extends obsidian.Modal { - constructor(app, editor, settings, plugin) { - super(app); - this.editor = editor; - this.settings = settings; - this.plugin = plugin; - } - onOpen() { - const { contentEl, titleEl, editor, modalEl } = this; - modalEl.addClass('find-replace-modal'); - titleEl.setText('Regex Find/Replace'); - const rowClass = 'row'; - const divClass = 'div'; - const noSelection = editor.getSelection() === ''; - let regexFlags = 'gm'; - if (this.settings.caseInsensitive) - regexFlags = regexFlags.concat('i'); - logger('No text selected?: ' + noSelection, 9); - const addTextComponent = (label, placeholder, postfix = '') => { - const containerEl = document.createElement(divClass); - containerEl.addClass(rowClass); - const targetEl = document.createElement(divClass); - targetEl.addClass('input-wrapper'); - const labelEl = document.createElement(divClass); - labelEl.addClass('input-label'); - labelEl.setText(label); - const labelEl2 = document.createElement(divClass); - labelEl2.addClass('postfix-label'); - labelEl2.setText(postfix); - containerEl.appendChild(labelEl); - containerEl.appendChild(targetEl); - containerEl.appendChild(labelEl2); - const component = new obsidian.TextComponent(targetEl); - component.setPlaceholder(placeholder); - contentEl.append(containerEl); - return [component, labelEl2]; - }; - const addToggleComponent = (label, tooltip, hide = false) => { - const containerEl = document.createElement(divClass); - containerEl.addClass(rowClass); - const targetEl = document.createElement(divClass); - targetEl.addClass(rowClass); - const component = new obsidian.ToggleComponent(targetEl); - component.setTooltip(tooltip); - const labelEl = document.createElement(divClass); - labelEl.addClass('check-label'); - labelEl.setText(label); - containerEl.appendChild(labelEl); - containerEl.appendChild(targetEl); - if (!hide) - contentEl.appendChild(containerEl); - return component; - }; - // Create input fields - const findRow = addTextComponent('Find:', 'e.g. (.*)', '/' + regexFlags); - const findInputComponent = findRow[0]; - const findRegexFlags = findRow[1]; - const replaceRow = addTextComponent('Replace:', 'e.g. $1', this.settings.processLineBreak ? '\\n=LF' : ''); - const replaceWithInputComponent = replaceRow[0]; - // Create and show regular expression toggle switch - const regToggleComponent = addToggleComponent('Use regular expressions', 'If enabled, regular expressions in the find field are processed as such, and regex groups might be addressed in the replace field'); - // Update regex-flags label if regular expressions are enabled or disabled - regToggleComponent.onChange(regNew => { - if (regNew) { - findRegexFlags.setText('/' + regexFlags); - } - else { - findRegexFlags.setText(''); - } - }); - // Create and show selection toggle switch only if any text is selected - const selToggleComponent = addToggleComponent('Replace only in selection', 'If enabled, replaces only occurances in the currently selected text', noSelection); - // Create Buttons - const buttonContainerEl = document.createElement(divClass); - buttonContainerEl.addClass(rowClass); - const submitButtonTarget = document.createElement(divClass); - submitButtonTarget.addClass('button-wrapper'); - submitButtonTarget.addClass(rowClass); - const cancelButtonTarget = document.createElement(divClass); - cancelButtonTarget.addClass('button-wrapper'); - cancelButtonTarget.addClass(rowClass); - const submitButtonComponent = new obsidian.ButtonComponent(submitButtonTarget); - const cancelButtonComponent = new obsidian.ButtonComponent(cancelButtonTarget); - cancelButtonComponent.setButtonText('Cancel'); - cancelButtonComponent.onClick(() => { - logger('Action cancelled.', 8); - this.close(); - }); - submitButtonComponent.setButtonText('Replace All'); - submitButtonComponent.setCta(); - submitButtonComponent.onClick(() => { - let resultString = 'No match'; - let scope = ''; - const searchString = findInputComponent.getValue(); - let replaceString = replaceWithInputComponent.getValue(); - const selectedText = editor.getSelection(); - if (searchString === '') { - new obsidian.Notice('Nothing to search for!'); - return; - } - // Replace line breaks in find-field if option is enabled - if (this.settings.processLineBreak) { - logger('Replacing linebreaks in replace-field', 9); - logger(' old: ' + replaceString, 9); - replaceString = replaceString.replace(/\\n/gm, '\n'); - logger(' new: ' + replaceString, 9); - } - // Replace line breaks in find-field if option is enabled - if (this.settings.processTab) { - logger('Replacing tabs in replace-field', 9); - logger(' old: ' + replaceString, 9); - replaceString = replaceString.replace(/\\t/gm, '\t'); - logger(' new: ' + replaceString, 9); - } - // Check if regular expressions should be used - if (regToggleComponent.getValue()) { - logger('USING regex with flags: ' + regexFlags, 8); - const searchRegex = new RegExp(searchString, regexFlags); - if (!selToggleComponent.getValue()) { - logger(' SCOPE: Full document', 9); - const documentText = editor.getValue(); - const rresult = documentText.match(searchRegex); - if (rresult) { - editor.setValue(documentText.replace(searchRegex, replaceString)); - resultString = `Made ${rresult.length} replacement(s) in document`; - } - } - else { - logger(' SCOPE: Selection', 9); - const rresult = selectedText.match(searchRegex); - if (rresult) { - editor.replaceSelection(selectedText.replace(searchRegex, replaceString)); - resultString = `Made ${rresult.length} replacement(s) in selection`; - } - } - } - else { - logger('NOT using regex', 8); - let nrOfHits = 0; - if (!selToggleComponent.getValue()) { - logger(' SCOPE: Full document', 9); - scope = 'selection'; - const documentText = editor.getValue(); - const documentSplit = documentText.split(searchString); - nrOfHits = documentSplit.length - 1; - editor.setValue(documentSplit.join(replaceString)); - } - else { - logger(' SCOPE: Selection', 9); - scope = 'document'; - const selectedSplit = selectedText.split(searchString); - nrOfHits = selectedSplit.length - 1; - editor.replaceSelection(selectedSplit.join(replaceString)); - } - resultString = `Made ${nrOfHits} replacement(s) in ${scope}`; - } - // Saving settings (find/replace text and toggle switch states) - this.settings.findText = searchString; - this.settings.replaceText = replaceString; - this.settings.useRegEx = regToggleComponent.getValue(); - this.settings.selOnly = selToggleComponent.getValue(); - this.plugin.saveData(this.settings); - this.close(); - new obsidian.Notice(resultString); - }); - // Apply settings - regToggleComponent.setValue(this.settings.useRegEx); - selToggleComponent.setValue(this.settings.selOnly); - replaceWithInputComponent.setValue(this.settings.replaceText); - // Check if the prefill find option is enabled and the selection does not contain linebreaks - if (this.settings.prefillFind && editor.getSelection().indexOf('\n') < 0 && !noSelection) { - logger('Found selection without linebreaks and option is enabled -> fill', 9); - findInputComponent.setValue(editor.getSelection()); - selToggleComponent.setValue(false); - } - else { - logger('Restore find text', 9); - findInputComponent.setValue(this.settings.findText); - } - // Add button row to dialog - buttonContainerEl.appendChild(submitButtonTarget); - buttonContainerEl.appendChild(cancelButtonTarget); - contentEl.appendChild(buttonContainerEl); - // If no text is selected, disable selection-toggle-switch - if (noSelection) - selToggleComponent.setValue(false); - } - onClose() { - const { contentEl } = this; - contentEl.empty(); - } -} -class RegexFindReplaceSettingTab extends obsidian.PluginSettingTab { - constructor(app, plugin) { - super(app, plugin); - this.plugin = plugin; - } - display() { - const { containerEl } = this; - containerEl.empty(); - containerEl.createEl('h4', { text: 'Regular Expression Settings' }); - new obsidian.Setting(containerEl) - .setName('Case Insensitive') - .setDesc('When using regular expressions, apply the \'/i\' modifier for case insensitive search)') - .addToggle(toggle => toggle - .setValue(this.plugin.settings.caseInsensitive) - .onChange((value) => __awaiter(this, void 0, void 0, function* () { - logger('Settings update: caseInsensitive: ' + value); - this.plugin.settings.caseInsensitive = value; - yield this.plugin.saveSettings(); - }))); - containerEl.createEl('h4', { text: 'General Settings' }); - new obsidian.Setting(containerEl) - .setName('Process \\n as line break') - .setDesc('When \'\\n\' is used in the replace field, a \'line break\' will be inserted accordingly') - .addToggle(toggle => toggle - .setValue(this.plugin.settings.processLineBreak) - .onChange((value) => __awaiter(this, void 0, void 0, function* () { - logger('Settings update: processLineBreak: ' + value); - this.plugin.settings.processLineBreak = value; - yield this.plugin.saveSettings(); - }))); - new obsidian.Setting(containerEl) - .setName('Prefill Find Field') - .setDesc('Copy the currently selected text (if any) into the \'Find\' text field. This setting is only applied if the selection does not contain linebreaks') - .addToggle(toggle => toggle - .setValue(this.plugin.settings.prefillFind) - .onChange((value) => __awaiter(this, void 0, void 0, function* () { - logger('Settings update: prefillFind: ' + value); - this.plugin.settings.prefillFind = value; - yield this.plugin.saveSettings(); - }))); - } -} - -module.exports = RegexFindReplacePlugin; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZXMiOlsibm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIsInNyYy9tYWluLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cclxuXHJcblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxyXG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXHJcblxyXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXHJcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxyXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXHJcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxyXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxyXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXHJcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlICovXHJcblxyXG52YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uKGQsIGIpIHtcclxuICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcclxuICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XHJcbiAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcclxuICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXh0ZW5kcyhkLCBiKSB7XHJcbiAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcclxuICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cclxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcclxufVxyXG5cclxuZXhwb3J0IHZhciBfX2Fzc2lnbiA9IGZ1bmN0aW9uKCkge1xyXG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uIF9fYXNzaWduKHQpIHtcclxuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcclxuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0W3BdID0gc1twXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVzdChzLCBlKSB7XHJcbiAgICB2YXIgdCA9IHt9O1xyXG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXHJcbiAgICAgICAgdFtwXSA9IHNbcF07XHJcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXHJcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcclxuICAgICAgICB9XHJcbiAgICByZXR1cm4gdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcclxuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcclxuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3BhcmFtKHBhcmFtSW5kZXgsIGRlY29yYXRvcikge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkgeyBkZWNvcmF0b3IodGFyZ2V0LCBrZXksIHBhcmFtSW5kZXgpOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XHJcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZ2VuZXJhdG9yKHRoaXNBcmcsIGJvZHkpIHtcclxuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XHJcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xyXG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcclxuICAgICAgICB3aGlsZSAoXykgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xyXG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XHJcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxyXG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgdmFyIF9fY3JlYXRlQmluZGluZyA9IE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcclxuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfSk7XHJcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XHJcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xyXG4gICAgb1trMl0gPSBtW2tdO1xyXG59KTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2V4cG9ydFN0YXIobSwgbykge1xyXG4gICAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBwKSkgX19jcmVhdGVCaW5kaW5nKG8sIG0sIHApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX192YWx1ZXMobykge1xyXG4gICAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBtID0gcyAmJiBvW3NdLCBpID0gMDtcclxuICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xyXG4gICAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xyXG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcclxuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3JlYWQobywgbikge1xyXG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xyXG4gICAgaWYgKCFtKSByZXR1cm4gbztcclxuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxyXG4gICAgZmluYWxseSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG4vKiogQGRlcHJlY2F0ZWQgKi9cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkKCkge1xyXG4gICAgZm9yICh2YXIgYXIgPSBbXSwgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgYXIgPSBhci5jb25jYXQoX19yZWFkKGFyZ3VtZW50c1tpXSkpO1xyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG4vKiogQGRlcHJlY2F0ZWQgKi9cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXlzKCkge1xyXG4gICAgZm9yICh2YXIgcyA9IDAsIGkgPSAwLCBpbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKSBzICs9IGFyZ3VtZW50c1tpXS5sZW5ndGg7XHJcbiAgICBmb3IgKHZhciByID0gQXJyYXkocyksIGsgPSAwLCBpID0gMDsgaSA8IGlsOyBpKyspXHJcbiAgICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXHJcbiAgICAgICAgICAgIHJba10gPSBhW2pdO1xyXG4gICAgcmV0dXJuIHI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZEFycmF5KHRvLCBmcm9tLCBwYWNrKSB7XHJcbiAgICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcclxuICAgICAgICAgICAgaWYgKCFhcikgYXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tLCAwLCBpKTtcclxuICAgICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdCh2KSB7XHJcbiAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpZiAoZ1tuXSkgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxyXG4gICAgZnVuY3Rpb24gc3RlcChyKSB7IHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpOyB9XHJcbiAgICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jRGVsZWdhdG9yKG8pIHtcclxuICAgIHZhciBpLCBwO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiLCBmdW5jdGlvbiAoZSkgeyB0aHJvdyBlOyB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpW25dID0gb1tuXSA/IGZ1bmN0aW9uICh2KSB7IHJldHVybiAocCA9ICFwKSA/IHsgdmFsdWU6IF9fYXdhaXQob1tuXSh2KSksIGRvbmU6IG4gPT09IFwicmV0dXJuXCIgfSA6IGYgPyBmKHYpIDogdjsgfSA6IGY7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNWYWx1ZXMobykge1xyXG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIHZhciBtID0gb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIGk7XHJcbiAgICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IChvID0gdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpLCBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaSk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgaVtuXSA9IG9bbl0gJiYgZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdiA9IG9bbl0odiksIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHYuZG9uZSwgdi52YWx1ZSk7IH0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCBkLCB2KSB7IFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGZ1bmN0aW9uKHYpIHsgcmVzb2x2ZSh7IHZhbHVlOiB2LCBkb25lOiBkIH0pOyB9LCByZWplY3QpOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ha2VUZW1wbGF0ZU9iamVjdChjb29rZWQsIHJhdykge1xyXG4gICAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29va2VkLCBcInJhd1wiLCB7IHZhbHVlOiByYXcgfSk7IH0gZWxzZSB7IGNvb2tlZC5yYXcgPSByYXc7IH1cclxuICAgIHJldHVybiBjb29rZWQ7XHJcbn07XHJcblxyXG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XHJcbn0pIDogZnVuY3Rpb24obywgdikge1xyXG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0U3Rhcihtb2QpIHtcclxuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XHJcbiAgICB2YXIgcmVzdWx0ID0ge307XHJcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XHJcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0RGVmYXVsdChtb2QpIHtcclxuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgZGVmYXVsdDogbW9kIH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHJlY2VpdmVyLCBzdGF0ZSwga2luZCwgZikge1xyXG4gICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgZ2V0dGVyXCIpO1xyXG4gICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgcmVhZCBwcml2YXRlIG1lbWJlciBmcm9tIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XHJcbiAgICByZXR1cm4ga2luZCA9PT0gXCJtXCIgPyBmIDoga2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIpIDogZiA/IGYudmFsdWUgOiBzdGF0ZS5nZXQocmVjZWl2ZXIpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZFNldChyZWNlaXZlciwgc3RhdGUsIHZhbHVlLCBraW5kLCBmKSB7XHJcbiAgICBpZiAoa2luZCA9PT0gXCJtXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGVcIik7XHJcbiAgICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBzZXR0ZXJcIik7XHJcbiAgICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB3cml0ZSBwcml2YXRlIG1lbWJlciB0byBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xyXG4gICAgcmV0dXJuIChraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlciwgdmFsdWUpIDogZiA/IGYudmFsdWUgPSB2YWx1ZSA6IHN0YXRlLnNldChyZWNlaXZlciwgdmFsdWUpKSwgdmFsdWU7XHJcbn1cclxuIiwiaW1wb3J0IHtcblx0QXBwLFxuXHRCdXR0b25Db21wb25lbnQsXG5cdEVkaXRvcixcblx0TW9kYWwsXG5cdE5vdGljZSxcblx0UGx1Z2luLFxuXHRUZXh0Q29tcG9uZW50LFxuXHRUb2dnbGVDb21wb25lbnQsXG5cdFBsdWdpblNldHRpbmdUYWIsXG5cdFNldHRpbmdcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbnRlcmZhY2UgUmZyUGx1Z2luU2V0dGluZ3Mge1xuXHRmaW5kVGV4dDogc3RyaW5nO1xuXHRyZXBsYWNlVGV4dDogc3RyaW5nO1xuXHR1c2VSZWdFeDogYm9vbGVhbjtcblx0c2VsT25seTogYm9vbGVhbjtcblx0Y2FzZUluc2Vuc2l0aXZlOiBib29sZWFuO1xuXHRwcm9jZXNzTGluZUJyZWFrOiBib29sZWFuO1xuXHRwcm9jZXNzVGFiOiBib29sZWFuO1xuXHRwcmVmaWxsRmluZDogYm9vbGVhbjtcbn1cblxuY29uc3QgREVGQVVMVF9TRVRUSU5HUzogUmZyUGx1Z2luU2V0dGluZ3MgPSB7XG5cdGZpbmRUZXh0OiAnJyxcblx0cmVwbGFjZVRleHQ6ICcnLFxuXHR1c2VSZWdFeDogdHJ1ZSxcblx0c2VsT25seTogZmFsc2UsXG5cdGNhc2VJbnNlbnNpdGl2ZTogZmFsc2UsXG5cdHByb2Nlc3NMaW5lQnJlYWs6IGZhbHNlLFxuXHRwcm9jZXNzVGFiOiBmYWxzZSxcblx0cHJlZmlsbEZpbmQ6IGZhbHNlXG59XG5cbi8vIGxvZ1RocmVzaG9sZDogMCAuLi4gb25seSBlcnJvciBtZXNzYWdlc1xuLy8gICAgICAgICAgICAgICA5IC4uLiB2ZXJib3NlIG91dHB1dFxuY29uc3QgbG9nVGhyZXNob2xkID0gOTtcbmNvbnN0IGxvZ2dlciA9IChsb2dTdHJpbmc6IHN0cmluZywgbG9nTGV2ZWw9MCk6IHZvaWQgPT4ge2lmIChsb2dMZXZlbCA8PSBsb2dUaHJlc2hvbGQpIGNvbnNvbGUubG9nICgnUmVnZXhGaVJlOiAnICsgbG9nU3RyaW5nKX07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlZ2V4RmluZFJlcGxhY2VQbHVnaW4gZXh0ZW5kcyBQbHVnaW4ge1xuXHRzZXR0aW5nczogUmZyUGx1Z2luU2V0dGluZ3M7XG5cblx0YXN5bmMgb25sb2FkKCkge1xuXHRcdGxvZ2dlcignTG9hZGluZyBQbHVnaW4uLi4nLCA5KTtcblx0XHRhd2FpdCB0aGlzLmxvYWRTZXR0aW5ncygpO1xuXG5cdFx0dGhpcy5hZGRTZXR0aW5nVGFiKG5ldyBSZWdleEZpbmRSZXBsYWNlU2V0dGluZ1RhYih0aGlzLmFwcCwgdGhpcykpO1xuXG5cblx0XHR0aGlzLmFkZENvbW1hbmQoe1xuXHRcdFx0aWQ6ICdvYnNpZGlhbi1yZWdleC1yZXBsYWNlJyxcblx0XHRcdG5hbWU6ICdGaW5kIGFuZCBSZXBsYWNlIHVzaW5nIHJlZ3VsYXIgZXhwcmVzc2lvbnMnLFxuXHRcdFx0ZWRpdG9yQ2FsbGJhY2s6IChlZGl0b3IpID0+IHtcblx0XHRcdFx0bmV3IEZpbmRBbmRSZXBsYWNlTW9kYWwodGhpcy5hcHAsIGVkaXRvciwgdGhpcy5zZXR0aW5ncywgdGhpcykub3BlbigpO1xuXHRcdFx0fSxcblx0XHR9KTtcblx0fVxuXG5cdG9udW5sb2FkKCkge1xuXHRcdGxvZ2dlcignQnllIScsIDkpO1xuXHR9XG5cblx0YXN5bmMgbG9hZFNldHRpbmdzKCkge1xuXHRcdGxvZ2dlcignTG9hZGluZyBTZXR0aW5ncy4uLicsIDYpO1xuXHRcdHRoaXMuc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBERUZBVUxUX1NFVFRJTkdTLCBhd2FpdCB0aGlzLmxvYWREYXRhKCkpO1xuXHRcdGxvZ2dlcignICAgZmluZFZhbDogICAgICAgICAnICsgdGhpcy5zZXR0aW5ncy5maW5kVGV4dCwgNik7XG5cdFx0bG9nZ2VyKCcgICByZXBsYWNlVGV4dDogICAgICcgKyB0aGlzLnNldHRpbmdzLnJlcGxhY2VUZXh0LCA2KTtcblx0XHRsb2dnZXIoJyAgIGNhc2VJbnNlbnNpdGl2ZTogJyArIHRoaXMuc2V0dGluZ3MuY2FzZUluc2Vuc2l0aXZlLCA2KTtcblx0XHRsb2dnZXIoJyAgIHByb2Nlc3NMaW5lQnJlYWs6ICcgKyB0aGlzLnNldHRpbmdzLnByb2Nlc3NMaW5lQnJlYWssIDYpO1xuXG5cdH1cblxuXHRhc3luYyBzYXZlU2V0dGluZ3MoKSB7XG5cdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcblx0fVxuXG59XG5cbmNsYXNzIEZpbmRBbmRSZXBsYWNlTW9kYWwgZXh0ZW5kcyBNb2RhbCB7XG5cdGNvbnN0cnVjdG9yKGFwcDogQXBwLCBlZGl0b3I6IEVkaXRvciwgc2V0dGluZ3M6IFJmclBsdWdpblNldHRpbmdzLCBwbHVnaW46IFBsdWdpbikge1xuXHRcdHN1cGVyKGFwcCk7XG5cdFx0dGhpcy5lZGl0b3IgPSBlZGl0b3I7XG5cdFx0dGhpcy5zZXR0aW5ncyA9IHNldHRpbmdzO1xuXHRcdHRoaXMucGx1Z2luID0gcGx1Z2luO1xuXHR9XG5cblx0c2V0dGluZ3M6IFJmclBsdWdpblNldHRpbmdzO1xuXHRlZGl0b3I6IEVkaXRvcjtcblx0cGx1Z2luOiBQbHVnaW47XG5cblx0b25PcGVuKCkge1xuXHRcdGNvbnN0IHsgY29udGVudEVsLCB0aXRsZUVsLCBlZGl0b3IsIG1vZGFsRWwgfSA9IHRoaXM7XG5cblx0XHRtb2RhbEVsLmFkZENsYXNzKCdmaW5kLXJlcGxhY2UtbW9kYWwnKTtcblx0XHR0aXRsZUVsLnNldFRleHQoJ1JlZ2V4IEZpbmQvUmVwbGFjZScpO1xuXG5cdFx0Y29uc3Qgcm93Q2xhc3MgPSAncm93Jztcblx0XHRjb25zdCBkaXZDbGFzcyA9ICdkaXYnO1xuXHRcdGNvbnN0IG5vU2VsZWN0aW9uID0gZWRpdG9yLmdldFNlbGVjdGlvbigpID09PSAnJztcblx0XHRsZXQgcmVnZXhGbGFncyA9ICdnbSc7XG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuY2FzZUluc2Vuc2l0aXZlKSByZWdleEZsYWdzID0gcmVnZXhGbGFncy5jb25jYXQoJ2knKTtcblxuXHRcdGxvZ2dlcignTm8gdGV4dCBzZWxlY3RlZD86ICcgKyBub1NlbGVjdGlvbiwgOSk7XG5cblx0XHRjb25zdCBhZGRUZXh0Q29tcG9uZW50ID0gKGxhYmVsOiBzdHJpbmcsIHBsYWNlaG9sZGVyOiBzdHJpbmcsIHBvc3RmaXg9JycpOiBbVGV4dENvbXBvbmVudCwgSFRNTERpdkVsZW1lbnRdID0+IHtcblx0XHRcdGNvbnN0IGNvbnRhaW5lckVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChkaXZDbGFzcyk7XG5cdFx0XHRjb250YWluZXJFbC5hZGRDbGFzcyhyb3dDbGFzcyk7XG5cblx0XHRcdGNvbnN0IHRhcmdldEVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChkaXZDbGFzcyk7XG5cdFx0XHR0YXJnZXRFbC5hZGRDbGFzcygnaW5wdXQtd3JhcHBlcicpO1xuXG5cdFx0XHRjb25zdCBsYWJlbEVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChkaXZDbGFzcyk7XG5cdFx0XHRsYWJlbEVsLmFkZENsYXNzKCdpbnB1dC1sYWJlbCcpO1xuXHRcdFx0bGFiZWxFbC5zZXRUZXh0KGxhYmVsKTtcblxuXHRcdFx0Y29uc3QgbGFiZWxFbDIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGRpdkNsYXNzKTtcblx0XHRcdGxhYmVsRWwyLmFkZENsYXNzKCdwb3N0Zml4LWxhYmVsJyk7XG5cdFx0XHRsYWJlbEVsMi5zZXRUZXh0KHBvc3RmaXgpO1xuXG5cdFx0XHRjb250YWluZXJFbC5hcHBlbmRDaGlsZChsYWJlbEVsKTtcblx0XHRcdGNvbnRhaW5lckVsLmFwcGVuZENoaWxkKHRhcmdldEVsKTtcblx0XHRcdGNvbnRhaW5lckVsLmFwcGVuZENoaWxkKGxhYmVsRWwyKTtcblxuXHRcdFx0Y29uc3QgY29tcG9uZW50ID0gbmV3IFRleHRDb21wb25lbnQodGFyZ2V0RWwpO1xuXHRcdFx0Y29tcG9uZW50LnNldFBsYWNlaG9sZGVyKHBsYWNlaG9sZGVyKTtcblxuXHRcdFx0Y29udGVudEVsLmFwcGVuZChjb250YWluZXJFbCk7XG5cdFx0XHRyZXR1cm4gW2NvbXBvbmVudCwgbGFiZWxFbDJdO1xuXHRcdH07XG5cblx0XHRjb25zdCBhZGRUb2dnbGVDb21wb25lbnQgPSAobGFiZWw6IHN0cmluZywgdG9vbHRpcDogc3RyaW5nLCBoaWRlID0gZmFsc2UpOiBUb2dnbGVDb21wb25lbnQgPT4ge1xuXHRcdFx0Y29uc3QgY29udGFpbmVyRWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGRpdkNsYXNzKTtcblx0XHRcdGNvbnRhaW5lckVsLmFkZENsYXNzKHJvd0NsYXNzKTtcblx0XG5cdFx0XHRjb25zdCB0YXJnZXRFbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZGl2Q2xhc3MpO1xuXHRcdFx0dGFyZ2V0RWwuYWRkQ2xhc3Mocm93Q2xhc3MpO1xuXG5cdFx0XHRjb25zdCBjb21wb25lbnQgPSBuZXcgVG9nZ2xlQ29tcG9uZW50KHRhcmdldEVsKTtcblx0XHRcdGNvbXBvbmVudC5zZXRUb29sdGlwKHRvb2x0aXApO1xuXHRcblx0XHRcdGNvbnN0IGxhYmVsRWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGRpdkNsYXNzKTtcblx0XHRcdGxhYmVsRWwuYWRkQ2xhc3MoJ2NoZWNrLWxhYmVsJyk7XG5cdFx0XHRsYWJlbEVsLnNldFRleHQobGFiZWwpO1xuXHRcblx0XHRcdGNvbnRhaW5lckVsLmFwcGVuZENoaWxkKGxhYmVsRWwpO1xuXHRcdFx0Y29udGFpbmVyRWwuYXBwZW5kQ2hpbGQodGFyZ2V0RWwpO1xuXHRcdFx0aWYgKCFoaWRlKSBjb250ZW50RWwuYXBwZW5kQ2hpbGQoY29udGFpbmVyRWwpO1xuXHRcdFx0cmV0dXJuIGNvbXBvbmVudDtcblx0XHR9O1xuXG5cdFx0Ly8gQ3JlYXRlIGlucHV0IGZpZWxkc1xuXHRcdGNvbnN0IGZpbmRSb3cgPSBhZGRUZXh0Q29tcG9uZW50KCdGaW5kOicsICdlLmcuICguKiknLCAnLycgKyByZWdleEZsYWdzKTtcblx0XHRjb25zdCBmaW5kSW5wdXRDb21wb25lbnQgPSBmaW5kUm93WzBdO1xuXHRcdGNvbnN0IGZpbmRSZWdleEZsYWdzID0gZmluZFJvd1sxXTtcblx0XHRjb25zdCByZXBsYWNlUm93ID0gYWRkVGV4dENvbXBvbmVudCgnUmVwbGFjZTonLCAnZS5nLiAkMScsIHRoaXMuc2V0dGluZ3MucHJvY2Vzc0xpbmVCcmVhayA/ICdcXFxcbj1MRicgOiAnJyk7XG5cdFx0Y29uc3QgcmVwbGFjZVdpdGhJbnB1dENvbXBvbmVudCA9IHJlcGxhY2VSb3dbMF07XG5cblx0XHQvLyBDcmVhdGUgYW5kIHNob3cgcmVndWxhciBleHByZXNzaW9uIHRvZ2dsZSBzd2l0Y2hcblx0XHRjb25zdCByZWdUb2dnbGVDb21wb25lbnQgPSBhZGRUb2dnbGVDb21wb25lbnQoJ1VzZSByZWd1bGFyIGV4cHJlc3Npb25zJywgJ0lmIGVuYWJsZWQsIHJlZ3VsYXIgZXhwcmVzc2lvbnMgaW4gdGhlIGZpbmQgZmllbGQgYXJlIHByb2Nlc3NlZCBhcyBzdWNoLCBhbmQgcmVnZXggZ3JvdXBzIG1pZ2h0IGJlIGFkZHJlc3NlZCBpbiB0aGUgcmVwbGFjZSBmaWVsZCcpO1xuXHRcdFxuXHRcdC8vIFVwZGF0ZSByZWdleC1mbGFncyBsYWJlbCBpZiByZWd1bGFyIGV4cHJlc3Npb25zIGFyZSBlbmFibGVkIG9yIGRpc2FibGVkXG5cdFx0cmVnVG9nZ2xlQ29tcG9uZW50Lm9uQ2hhbmdlKCByZWdOZXcgPT4ge1xuXHRcdFx0aWYgKHJlZ05ldykge1xuXHRcdFx0XHRmaW5kUmVnZXhGbGFncy5zZXRUZXh0KCcvJyArIHJlZ2V4RmxhZ3MpO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZSB7XG5cdFx0XHRcdGZpbmRSZWdleEZsYWdzLnNldFRleHQoJycpO1xuXHRcdFx0fVxuXHRcdH0pXG5cblx0XHQvLyBDcmVhdGUgYW5kIHNob3cgc2VsZWN0aW9uIHRvZ2dsZSBzd2l0Y2ggb25seSBpZiBhbnkgdGV4dCBpcyBzZWxlY3RlZFxuXHRcdGNvbnN0IHNlbFRvZ2dsZUNvbXBvbmVudCA9IGFkZFRvZ2dsZUNvbXBvbmVudCgnUmVwbGFjZSBvbmx5IGluIHNlbGVjdGlvbicsICdJZiBlbmFibGVkLCByZXBsYWNlcyBvbmx5IG9jY3VyYW5jZXMgaW4gdGhlIGN1cnJlbnRseSBzZWxlY3RlZCB0ZXh0Jywgbm9TZWxlY3Rpb24pO1xuXG5cdFx0Ly8gQ3JlYXRlIEJ1dHRvbnNcblx0XHRjb25zdCBidXR0b25Db250YWluZXJFbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZGl2Q2xhc3MpO1xuXHRcdGJ1dHRvbkNvbnRhaW5lckVsLmFkZENsYXNzKHJvd0NsYXNzKTtcblxuXHRcdGNvbnN0IHN1Ym1pdEJ1dHRvblRhcmdldCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZGl2Q2xhc3MpO1xuXHRcdHN1Ym1pdEJ1dHRvblRhcmdldC5hZGRDbGFzcygnYnV0dG9uLXdyYXBwZXInKTtcblx0XHRzdWJtaXRCdXR0b25UYXJnZXQuYWRkQ2xhc3Mocm93Q2xhc3MpO1xuXG5cdFx0Y29uc3QgY2FuY2VsQnV0dG9uVGFyZ2V0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChkaXZDbGFzcyk7XG5cdFx0Y2FuY2VsQnV0dG9uVGFyZ2V0LmFkZENsYXNzKCdidXR0b24td3JhcHBlcicpO1xuXHRcdGNhbmNlbEJ1dHRvblRhcmdldC5hZGRDbGFzcyhyb3dDbGFzcyk7XG5cblx0XHRjb25zdCBzdWJtaXRCdXR0b25Db21wb25lbnQgPSBuZXcgQnV0dG9uQ29tcG9uZW50KHN1Ym1pdEJ1dHRvblRhcmdldCk7XG5cdFx0Y29uc3QgY2FuY2VsQnV0dG9uQ29tcG9uZW50ID0gbmV3IEJ1dHRvbkNvbXBvbmVudChjYW5jZWxCdXR0b25UYXJnZXQpO1xuXHRcdFxuXHRcdGNhbmNlbEJ1dHRvbkNvbXBvbmVudC5zZXRCdXR0b25UZXh0KCdDYW5jZWwnKTtcblx0XHRjYW5jZWxCdXR0b25Db21wb25lbnQub25DbGljaygoKSA9PiB7XG5cdFx0XHRsb2dnZXIoJ0FjdGlvbiBjYW5jZWxsZWQuJywgOCk7XG5cdFx0XHR0aGlzLmNsb3NlKCk7XG5cdFx0fSk7XG5cblx0XHRzdWJtaXRCdXR0b25Db21wb25lbnQuc2V0QnV0dG9uVGV4dCgnUmVwbGFjZSBBbGwnKTtcblx0XHRzdWJtaXRCdXR0b25Db21wb25lbnQuc2V0Q3RhKCk7XG5cdFx0c3VibWl0QnV0dG9uQ29tcG9uZW50Lm9uQ2xpY2soKCkgPT4ge1xuXHRcdFx0bGV0IHJlc3VsdFN0cmluZyA9ICdObyBtYXRjaCc7XG5cdFx0XHRsZXQgc2NvcGUgPSAnJztcblx0XHRcdGNvbnN0IHNlYXJjaFN0cmluZyA9IGZpbmRJbnB1dENvbXBvbmVudC5nZXRWYWx1ZSgpO1xuXHRcdFx0bGV0IHJlcGxhY2VTdHJpbmcgPSByZXBsYWNlV2l0aElucHV0Q29tcG9uZW50LmdldFZhbHVlKCk7XG5cdFx0XHRjb25zdCBzZWxlY3RlZFRleHQgPSBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7XG5cblx0XHRcdGlmIChzZWFyY2hTdHJpbmcgPT09ICcnKSB7XG5cdFx0XHRcdG5ldyBOb3RpY2UoJ05vdGhpbmcgdG8gc2VhcmNoIGZvciEnKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZXBsYWNlIGxpbmUgYnJlYWtzIGluIGZpbmQtZmllbGQgaWYgb3B0aW9uIGlzIGVuYWJsZWRcblx0XHRcdGlmICh0aGlzLnNldHRpbmdzLnByb2Nlc3NMaW5lQnJlYWspIHtcblx0XHRcdFx0bG9nZ2VyKCdSZXBsYWNpbmcgbGluZWJyZWFrcyBpbiByZXBsYWNlLWZpZWxkJywgOSk7XG5cdFx0XHRcdGxvZ2dlcignICBvbGQ6ICcgKyByZXBsYWNlU3RyaW5nLCA5KTtcblx0XHRcdFx0cmVwbGFjZVN0cmluZyA9IHJlcGxhY2VTdHJpbmcucmVwbGFjZSgvXFxcXG4vZ20sICdcXG4nKTtcblx0XHRcdFx0bG9nZ2VyKCcgIG5ldzogJyArIHJlcGxhY2VTdHJpbmcsIDkpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZXBsYWNlIGxpbmUgYnJlYWtzIGluIGZpbmQtZmllbGQgaWYgb3B0aW9uIGlzIGVuYWJsZWRcblx0XHRcdGlmICh0aGlzLnNldHRpbmdzLnByb2Nlc3NUYWIpIHtcblx0XHRcdFx0bG9nZ2VyKCdSZXBsYWNpbmcgdGFicyBpbiByZXBsYWNlLWZpZWxkJywgOSk7XG5cdFx0XHRcdGxvZ2dlcignICBvbGQ6ICcgKyByZXBsYWNlU3RyaW5nLCA5KTtcblx0XHRcdFx0cmVwbGFjZVN0cmluZyA9IHJlcGxhY2VTdHJpbmcucmVwbGFjZSgvXFxcXHQvZ20sICdcXHQnKTtcblx0XHRcdFx0bG9nZ2VyKCcgIG5ldzogJyArIHJlcGxhY2VTdHJpbmcsIDkpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDaGVjayBpZiByZWd1bGFyIGV4cHJlc3Npb25zIHNob3VsZCBiZSB1c2VkXG5cdFx0XHRpZihyZWdUb2dnbGVDb21wb25lbnQuZ2V0VmFsdWUoKSkge1xuXHRcdFx0XHRsb2dnZXIoJ1VTSU5HIHJlZ2V4IHdpdGggZmxhZ3M6ICcgKyByZWdleEZsYWdzLCA4KTtcblxuXHRcdFx0XHRjb25zdCBzZWFyY2hSZWdleCA9IG5ldyBSZWdFeHAoc2VhcmNoU3RyaW5nLCByZWdleEZsYWdzKTtcblx0XHRcdFx0aWYoIXNlbFRvZ2dsZUNvbXBvbmVudC5nZXRWYWx1ZSgpKSB7XG5cdFx0XHRcdFx0bG9nZ2VyKCcgICBTQ09QRTogRnVsbCBkb2N1bWVudCcsIDkpO1xuXHRcdFx0XHRcdGNvbnN0IGRvY3VtZW50VGV4dCA9IGVkaXRvci5nZXRWYWx1ZSgpO1xuXHRcdFx0XHRcdGNvbnN0IHJyZXN1bHQgPSBkb2N1bWVudFRleHQubWF0Y2goc2VhcmNoUmVnZXgpO1xuXHRcdFx0XHRcdGlmIChycmVzdWx0KSB7XG5cdFx0XHRcdFx0XHRlZGl0b3Iuc2V0VmFsdWUoZG9jdW1lbnRUZXh0LnJlcGxhY2Uoc2VhcmNoUmVnZXgsIHJlcGxhY2VTdHJpbmcpKTtcblx0XHRcdFx0XHRcdHJlc3VsdFN0cmluZyA9IGBNYWRlICR7cnJlc3VsdC5sZW5ndGh9IHJlcGxhY2VtZW50KHMpIGluIGRvY3VtZW50YDtcdFx0XHRcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0bG9nZ2VyKCcgICBTQ09QRTogU2VsZWN0aW9uJywgOSk7XG5cdFx0XHRcdFx0Y29uc3QgcnJlc3VsdCA9IHNlbGVjdGVkVGV4dC5tYXRjaChzZWFyY2hSZWdleCk7XG5cdFx0XHRcdFx0aWYgKHJyZXN1bHQpIHtcblx0XHRcdFx0XHRcdGVkaXRvci5yZXBsYWNlU2VsZWN0aW9uKHNlbGVjdGVkVGV4dC5yZXBsYWNlKHNlYXJjaFJlZ2V4LCByZXBsYWNlU3RyaW5nKSk7XHRcblx0XHRcdFx0XHRcdHJlc3VsdFN0cmluZyA9IGBNYWRlICR7cnJlc3VsdC5sZW5ndGh9IHJlcGxhY2VtZW50KHMpIGluIHNlbGVjdGlvbmA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0bG9nZ2VyKCdOT1QgdXNpbmcgcmVnZXgnLCA4KTtcblx0XHRcdFx0bGV0IG5yT2ZIaXRzID0gMDtcblx0XHRcdFx0aWYoIXNlbFRvZ2dsZUNvbXBvbmVudC5nZXRWYWx1ZSgpKSB7XG5cdFx0XHRcdFx0bG9nZ2VyKCcgICBTQ09QRTogRnVsbCBkb2N1bWVudCcsIDkpO1xuXHRcdFx0XHRcdHNjb3BlID0gJ3NlbGVjdGlvbidcblx0XHRcdFx0XHRjb25zdCBkb2N1bWVudFRleHQgPSBlZGl0b3IuZ2V0VmFsdWUoKTtcblx0XHRcdFx0XHRjb25zdCBkb2N1bWVudFNwbGl0ID0gZG9jdW1lbnRUZXh0LnNwbGl0KHNlYXJjaFN0cmluZyk7XG5cdFx0XHRcdFx0bnJPZkhpdHMgPSBkb2N1bWVudFNwbGl0Lmxlbmd0aCAtIDE7XG5cdFx0XHRcdFx0ZWRpdG9yLnNldFZhbHVlKGRvY3VtZW50U3BsaXQuam9pbihyZXBsYWNlU3RyaW5nKSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0bG9nZ2VyKCcgICBTQ09QRTogU2VsZWN0aW9uJywgOSk7XG5cdFx0XHRcdFx0c2NvcGUgPSAnZG9jdW1lbnQnO1xuXHRcdFx0XHRcdGNvbnN0IHNlbGVjdGVkU3BsaXQgPSBzZWxlY3RlZFRleHQuc3BsaXQoc2VhcmNoU3RyaW5nKTtcblx0XHRcdFx0XHRuck9mSGl0cyA9IHNlbGVjdGVkU3BsaXQubGVuZ3RoIC0gMTtcblx0XHRcdFx0XHRlZGl0b3IucmVwbGFjZVNlbGVjdGlvbihzZWxlY3RlZFNwbGl0LmpvaW4ocmVwbGFjZVN0cmluZykpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJlc3VsdFN0cmluZyA9IGBNYWRlICR7bnJPZkhpdHN9IHJlcGxhY2VtZW50KHMpIGluICR7c2NvcGV9YDtcblx0XHRcdH0gXHRcdFxuXHRcdFx0XG5cdFx0XHQvLyBTYXZpbmcgc2V0dGluZ3MgKGZpbmQvcmVwbGFjZSB0ZXh0IGFuZCB0b2dnbGUgc3dpdGNoIHN0YXRlcylcblx0XHRcdHRoaXMuc2V0dGluZ3MuZmluZFRleHQgPSBzZWFyY2hTdHJpbmc7XG5cdFx0XHR0aGlzLnNldHRpbmdzLnJlcGxhY2VUZXh0ID0gcmVwbGFjZVN0cmluZztcblx0XHRcdHRoaXMuc2V0dGluZ3MudXNlUmVnRXggPSByZWdUb2dnbGVDb21wb25lbnQuZ2V0VmFsdWUoKTtcblx0XHRcdHRoaXMuc2V0dGluZ3Muc2VsT25seSA9IHNlbFRvZ2dsZUNvbXBvbmVudC5nZXRWYWx1ZSgpO1xuXHRcdFx0dGhpcy5wbHVnaW4uc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XG5cblx0XHRcdHRoaXMuY2xvc2UoKTtcblx0XHRcdG5ldyBOb3RpY2UocmVzdWx0U3RyaW5nKTtcdFx0XHRcdFx0XG5cdFx0fSk7XG5cblx0XHQvLyBBcHBseSBzZXR0aW5nc1xuXHRcdHJlZ1RvZ2dsZUNvbXBvbmVudC5zZXRWYWx1ZSh0aGlzLnNldHRpbmdzLnVzZVJlZ0V4KTtcblx0XHRzZWxUb2dnbGVDb21wb25lbnQuc2V0VmFsdWUodGhpcy5zZXR0aW5ncy5zZWxPbmx5KTtcblx0XHRyZXBsYWNlV2l0aElucHV0Q29tcG9uZW50LnNldFZhbHVlKHRoaXMuc2V0dGluZ3MucmVwbGFjZVRleHQpO1xuXHRcdFxuXHRcdC8vIENoZWNrIGlmIHRoZSBwcmVmaWxsIGZpbmQgb3B0aW9uIGlzIGVuYWJsZWQgYW5kIHRoZSBzZWxlY3Rpb24gZG9lcyBub3QgY29udGFpbiBsaW5lYnJlYWtzXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MucHJlZmlsbEZpbmQgJiYgZWRpdG9yLmdldFNlbGVjdGlvbigpLmluZGV4T2YoJ1xcbicpIDwgMCAmJiAhbm9TZWxlY3Rpb24pIHtcblx0XHRcdGxvZ2dlcignRm91bmQgc2VsZWN0aW9uIHdpdGhvdXQgbGluZWJyZWFrcyBhbmQgb3B0aW9uIGlzIGVuYWJsZWQgLT4gZmlsbCcsOSk7XG5cdFx0XHRmaW5kSW5wdXRDb21wb25lbnQuc2V0VmFsdWUoZWRpdG9yLmdldFNlbGVjdGlvbigpKTtcblx0XHRcdHNlbFRvZ2dsZUNvbXBvbmVudC5zZXRWYWx1ZShmYWxzZSk7XG5cdFx0fVxuXHRcdGVsc2Uge1xuXHRcdFx0bG9nZ2VyKCdSZXN0b3JlIGZpbmQgdGV4dCcsIDkpO1xuXHRcdFx0ZmluZElucHV0Q29tcG9uZW50LnNldFZhbHVlKHRoaXMuc2V0dGluZ3MuZmluZFRleHQpO1xuXHRcdH1cblx0XHRcblx0XHQvLyBBZGQgYnV0dG9uIHJvdyB0byBkaWFsb2dcblx0XHRidXR0b25Db250YWluZXJFbC5hcHBlbmRDaGlsZChzdWJtaXRCdXR0b25UYXJnZXQpO1xuXHRcdGJ1dHRvbkNvbnRhaW5lckVsLmFwcGVuZENoaWxkKGNhbmNlbEJ1dHRvblRhcmdldCk7XG5cdFx0Y29udGVudEVsLmFwcGVuZENoaWxkKGJ1dHRvbkNvbnRhaW5lckVsKTtcblxuXHRcdC8vIElmIG5vIHRleHQgaXMgc2VsZWN0ZWQsIGRpc2FibGUgc2VsZWN0aW9uLXRvZ2dsZS1zd2l0Y2hcblx0XHRpZiAobm9TZWxlY3Rpb24pIHNlbFRvZ2dsZUNvbXBvbmVudC5zZXRWYWx1ZShmYWxzZSk7XG5cdH1cblx0XG5cdG9uQ2xvc2UoKSB7XG5cdFx0Y29uc3QgeyBjb250ZW50RWwgfSA9IHRoaXM7XG5cdFx0Y29udGVudEVsLmVtcHR5KCk7XG5cdH1cbn1cblxuY2xhc3MgUmVnZXhGaW5kUmVwbGFjZVNldHRpbmdUYWIgZXh0ZW5kcyBQbHVnaW5TZXR0aW5nVGFiIHtcblx0cGx1Z2luOiBSZWdleEZpbmRSZXBsYWNlUGx1Z2luO1xuXG5cdGNvbnN0cnVjdG9yKGFwcDogQXBwLCBwbHVnaW46IFJlZ2V4RmluZFJlcGxhY2VQbHVnaW4pIHtcblx0XHRzdXBlcihhcHAsIHBsdWdpbik7XG5cdFx0dGhpcy5wbHVnaW4gPSBwbHVnaW47XG5cdH1cblxuXHRkaXNwbGF5KCk6IHZvaWQge1xuXHRcdGNvbnN0IHtjb250YWluZXJFbH0gPSB0aGlzO1xuXHRcdGNvbnRhaW5lckVsLmVtcHR5KCk7XG5cblx0XHRjb250YWluZXJFbC5jcmVhdGVFbCgnaDQnLCB7dGV4dDogJ1JlZ3VsYXIgRXhwcmVzc2lvbiBTZXR0aW5ncyd9KTtcblxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ0Nhc2UgSW5zZW5zaXRpdmUnKVxuXHRcdFx0LnNldERlc2MoJ1doZW4gdXNpbmcgcmVndWxhciBleHByZXNzaW9ucywgYXBwbHkgdGhlIFxcJy9pXFwnIG1vZGlmaWVyIGZvciBjYXNlIGluc2Vuc2l0aXZlIHNlYXJjaCknKVxuXHRcdFx0LmFkZFRvZ2dsZSh0b2dnbGUgPT4gdG9nZ2xlXG5cdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5jYXNlSW5zZW5zaXRpdmUpXG5cdFx0XHRcdC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcblx0XHRcdFx0XHRsb2dnZXIoJ1NldHRpbmdzIHVwZGF0ZTogY2FzZUluc2Vuc2l0aXZlOiAnICsgdmFsdWUpO1xuXHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLmNhc2VJbnNlbnNpdGl2ZSA9IHZhbHVlO1xuXHRcdFx0XHRcdGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuXHRcdFx0XHR9KSk7XG5cblx0XHRjb250YWluZXJFbC5jcmVhdGVFbCgnaDQnLCB7dGV4dDogJ0dlbmVyYWwgU2V0dGluZ3MnfSk7XG5cblxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ1Byb2Nlc3MgXFxcXG4gYXMgbGluZSBicmVhaycpXG5cdFx0XHQuc2V0RGVzYygnV2hlbiBcXCdcXFxcblxcJyBpcyB1c2VkIGluIHRoZSByZXBsYWNlIGZpZWxkLCBhIFxcJ2xpbmUgYnJlYWtcXCcgd2lsbCBiZSBpbnNlcnRlZCBhY2NvcmRpbmdseScpXG5cdFx0XHQuYWRkVG9nZ2xlKHRvZ2dsZSA9PiB0b2dnbGVcblx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLnByb2Nlc3NMaW5lQnJlYWspXG5cdFx0XHRcdC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcblx0XHRcdFx0XHRsb2dnZXIoJ1NldHRpbmdzIHVwZGF0ZTogcHJvY2Vzc0xpbmVCcmVhazogJyArIHZhbHVlKTtcblx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9jZXNzTGluZUJyZWFrID0gdmFsdWU7XG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKTtcblxuXG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG5cdFx0XHQuc2V0TmFtZSgnUHJlZmlsbCBGaW5kIEZpZWxkJylcblx0XHRcdC5zZXREZXNjKCdDb3B5IHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgdGV4dCAoaWYgYW55KSBpbnRvIHRoZSBcXCdGaW5kXFwnIHRleHQgZmllbGQuIFRoaXMgc2V0dGluZyBpcyBvbmx5IGFwcGxpZWQgaWYgdGhlIHNlbGVjdGlvbiBkb2VzIG5vdCBjb250YWluIGxpbmVicmVha3MnKVxuXHRcdFx0LmFkZFRvZ2dsZSh0b2dnbGUgPT4gdG9nZ2xlXG5cdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcmVmaWxsRmluZClcblx0XHRcdFx0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdGxvZ2dlcignU2V0dGluZ3MgdXBkYXRlOiBwcmVmaWxsRmluZDogJyArIHZhbHVlKTtcblx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcmVmaWxsRmluZCA9IHZhbHVlO1xuXHRcdFx0XHRcdGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuXHRcdFx0XHR9KSk7XG5cdH1cbn0iXSwibmFtZXMiOlsiUGx1Z2luIiwiTW9kYWwiLCJUZXh0Q29tcG9uZW50IiwiVG9nZ2xlQ29tcG9uZW50IiwiQnV0dG9uQ29tcG9uZW50IiwiTm90aWNlIiwiUGx1Z2luU2V0dGluZ1RhYiIsIlNldHRpbmciXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUF1REE7QUFDTyxTQUFTLFNBQVMsQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUU7QUFDN0QsSUFBSSxTQUFTLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxPQUFPLEtBQUssWUFBWSxDQUFDLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLFVBQVUsT0FBTyxFQUFFLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUU7QUFDaEgsSUFBSSxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxPQUFPLENBQUMsRUFBRSxVQUFVLE9BQU8sRUFBRSxNQUFNLEVBQUU7QUFDL0QsUUFBUSxTQUFTLFNBQVMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO0FBQ25HLFFBQVEsU0FBUyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxD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 diff --git a/.obsidian/plugins/obsidian-regex-replace/manifest.json b/.obsidian/plugins/obsidian-regex-replace/manifest.json deleted file mode 100644 index 2300a3c..0000000 --- a/.obsidian/plugins/obsidian-regex-replace/manifest.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "author": "Martin Eder", - "authorUrl": "https://www.gruware.org", - "description": "Find and replace text using regular expressions.", - "id": "obsidian-regex-replace", - "isDesktopOnly": false, - "minAppVersion": "0.12.17", - "name": "Regex Find/Replace", - "version": "1.2.0" -} diff --git a/.obsidian/plugins/obsidian-regex-replace/styles.css b/.obsidian/plugins/obsidian-regex-replace/styles.css deleted file mode 100644 index b6a7e51..0000000 --- a/.obsidian/plugins/obsidian-regex-replace/styles.css +++ /dev/null @@ -1,51 +0,0 @@ -.find-replace-modal .modal-content .row { - display: flex; - align-items: center; - width: 100%; - margin-top: 8px; -} - - -.find-replace-modal .modal-content .row .input-label { - display: flex; - justify-content: flex-end; - height: 100%; -} - - -.find-replace-modal .modal-content .row .postfix-label { - display: flex; - height: 100%; - margin-left: 8px; - justify-content: flex-end; - color: gray; -} - - -.find-replace-modal .modal-content .row .check-label { - display: flex; - justify-content: flex-end; - width: 100%; - height: 100%; - margin-right: 8px; -} - - -.find-replace-modal .modal-content .row .input-wrapper { - display: flex; - align-items: center; - height: 100%; - width: 100%; - margin: 0; -} - - -.find-replace-modal .modal-content .row .input-wrapper input { - width: 100%; -} - - -.find-replace-modal .modal-content .button-wrapper { - justify-content: center; - margin-top: 16px; -} diff --git a/.obsidian/plugins/obsidian-style-settings/data.json b/.obsidian/plugins/obsidian-style-settings/data.json deleted file mode 100644 index ca39023..0000000 --- a/.obsidian/plugins/obsidian-style-settings/data.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "obsidian-prism-theme@@color-schemes-lt": "pt-color-scheme-periwinkle-lt" -} \ No newline at end of file diff --git a/.obsidian/plugins/obsidian-style-settings/main.js b/.obsidian/plugins/obsidian-style-settings/main.js deleted file mode 100644 index b7e0ea0..0000000 --- a/.obsidian/plugins/obsidian-style-settings/main.js +++ /dev/null @@ -1,9858 +0,0 @@ -/* -THIS IS A GENERATED/BUNDLED FILE BY ROLLUP -if you want to view the source visit the plugins github repository -*/ - -'use strict'; - -var obsidian = require('obsidian'); - -/*! ***************************************************************************** -Copyright (c) Microsoft Corporation. - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM -LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. -***************************************************************************** */ - -function __awaiter(thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -} - -class ExportModal extends obsidian.Modal { - constructor(app, plugin, section, config) { - super(app); - this.plugin = plugin; - this.config = config; - this.section = section; - } - onOpen() { - const { contentEl, modalEl } = this; - modalEl.addClass('modal-style-settings'); - new obsidian.Setting(contentEl) - .setName(`Export settings for: ${this.section}`) - .then((setting) => { - const output = JSON.stringify(this.config, null, 2); - // Build a copy to clipboard link - setting.controlEl.createEl('a', { - cls: 'style-settings-copy', - text: 'Copy to clipboard', - href: '#', - }, (copyButton) => { - new obsidian.TextAreaComponent(contentEl) - .setValue(output) - .then((textarea) => { - copyButton.addEventListener('click', (e) => { - e.preventDefault(); - // Select the textarea contents and copy them to the clipboard - textarea.inputEl.select(); - textarea.inputEl.setSelectionRange(0, 99999); - document.execCommand('copy'); - copyButton.addClass('success'); - setTimeout(() => { - // If the button is still in the dom, remove the success class - if (copyButton.parentNode) { - copyButton.removeClass('success'); - } - }, 2000); - }); - }); - }); - // Build a download link - setting.controlEl.createEl('a', { - cls: 'style-settings-download', - text: 'Download', - attr: { - download: 'style-settings.json', - href: `data:application/json;charset=utf-8,${encodeURIComponent(output)}`, - }, - }); - }); - } - onClose() { - const { contentEl } = this; - contentEl.empty(); - } -} - -class ImportModal extends obsidian.Modal { - constructor(app, plugin) { - super(app); - this.plugin = plugin; - } - onOpen() { - const { contentEl, modalEl } = this; - modalEl.addClass('modal-style-settings'); - new obsidian.Setting(contentEl) - .setName('Import style setting') - .setDesc('Import an entire or partial configuration. Warning: this may override existing settings'); - new obsidian.Setting(contentEl).then((setting) => { - // Build an error message container - const errorSpan = createSpan({ - cls: 'style-settings-import-error', - text: 'Error importing config', - }); - setting.nameEl.appendChild(errorSpan); - // Attempt to parse the imported data and close if successful - const importAndClose = (str) => __awaiter(this, void 0, void 0, function* () { - if (str) { - try { - const importedSettings = JSON.parse(str); - yield this.plugin.settingsManager.setSettings(importedSettings); - this.plugin.settingsTab.display(); - this.close(); - } - catch (e) { - errorSpan.addClass('active'); - errorSpan.setText(`Error importing style settings: ${e}`); - } - } - else { - errorSpan.addClass('active'); - errorSpan.setText(`Error importing style settings: config is empty`); - } - }); - // Build a file input - setting.controlEl.createEl('input', { - cls: 'style-settings-import-input', - attr: { - id: 'style-settings-import-input', - name: 'style-settings-import-input', - type: 'file', - accept: '.json', - }, - }, (importInput) => { - // Set up a FileReader so we can parse the file contents - importInput.addEventListener('change', (e) => { - const reader = new FileReader(); - reader.onload = (e) => __awaiter(this, void 0, void 0, function* () { - yield importAndClose(e.target.result.toString().trim()); - }); - reader.readAsText(e.target.files[0]); - }); - }); - // Build a label we will style as a link - setting.controlEl.createEl('label', { - cls: 'style-settings-import-label', - text: 'Import from file', - attr: { - for: 'style-settings-import-input', - }, - }); - new obsidian.TextAreaComponent(contentEl) - .setPlaceholder('Paste config here...') - .then((ta) => { - new obsidian.ButtonComponent(contentEl) - .setButtonText('Save') - .onClick(() => __awaiter(this, void 0, void 0, function* () { - yield importAndClose(ta.getValue().trim()); - })); - }); - }); - } - onClose() { - const { contentEl } = this; - contentEl.empty(); - } -} - -const SettingType = { - HEADING: 'heading', - INFO_TEXT: 'info-text', - CLASS_TOGGLE: 'class-toggle', - CLASS_SELECT: 'class-select', - VARIABLE_TEXT: 'variable-text', - VARIABLE_NUMBER: 'variable-number', - VARIABLE_NUMBER_SLIDER: 'variable-number-slider', - VARIABLE_SELECT: 'variable-select', - VARIABLE_COLOR: 'variable-color', - VARIABLE_THEMED_COLOR: 'variable-themed-color', - COLOR_GRADIENT: 'color-gradient', -}; - -var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; - -function getDefaultExportFromCjs (x) { - return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x; -} - -function createCommonjsModule(fn, basedir, module) { - return module = { - path: basedir, - exports: {}, - require: function (path, base) { - return commonjsRequire(path, (base === undefined || base === null) ? module.path : base); - } - }, fn(module, module.exports), module.exports; -} - -function commonjsRequire () { - throw new Error('Dynamic requires are not currently supported by @rollup/plugin-commonjs'); -} - -var chroma = createCommonjsModule(function (module, exports) { -/** - * chroma.js - JavaScript library for color conversions - * - * Copyright (c) 2011-2019, Gregor Aisch - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * 3. The name Gregor Aisch may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL GREGOR AISCH OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, - * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * ------------------------------------------------------- - * - * chroma.js includes colors from colorbrewer2.org, which are released under - * the following license: - * - * Copyright (c) 2002 Cynthia Brewer, Mark Harrower, - * and The Pennsylvania State University. - * - * 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. - * - * ------------------------------------------------------ - * - * Named colors are taken from X11 Color Names. - * http://www.w3.org/TR/css3-color/#svg-color - * - * @preserve - */ - -(function (global, factory) { - module.exports = factory() ; -}(commonjsGlobal, (function () { - var limit = function (x, min, max) { - if ( min === void 0 ) min=0; - if ( max === void 0 ) max=1; - - return x < min ? min : x > max ? max : x; - }; - - var clip_rgb = function (rgb) { - rgb._clipped = false; - rgb._unclipped = rgb.slice(0); - for (var i=0; i<=3; i++) { - if (i < 3) { - if (rgb[i] < 0 || rgb[i] > 255) { rgb._clipped = true; } - rgb[i] = limit(rgb[i], 0, 255); - } else if (i === 3) { - rgb[i] = limit(rgb[i], 0, 1); - } - } - return rgb; - }; - - // ported from jQuery's $.type - var classToType = {}; - for (var i = 0, list = ['Boolean', 'Number', 'String', 'Function', 'Array', 'Date', 'RegExp', 'Undefined', 'Null']; i < list.length; i += 1) { - var name = list[i]; - - classToType[("[object " + name + "]")] = name.toLowerCase(); - } - var type = function(obj) { - return classToType[Object.prototype.toString.call(obj)] || "object"; - }; - - var unpack = function (args, keyOrder) { - if ( keyOrder === void 0 ) keyOrder=null; - - // if called with more than 3 arguments, we return the arguments - if (args.length >= 3) { return Array.prototype.slice.call(args); } - // with less than 3 args we check if first arg is object - // and use the keyOrder string to extract and sort properties - if (type(args[0]) == 'object' && keyOrder) { - return keyOrder.split('') - .filter(function (k) { return args[0][k] !== undefined; }) - .map(function (k) { return args[0][k]; }); - } - // otherwise we just return the first argument - // (which we suppose is an array of args) - return args[0]; - }; - - var last = function (args) { - if (args.length < 2) { return null; } - var l = args.length-1; - if (type(args[l]) == 'string') { return args[l].toLowerCase(); } - return null; - }; - - var PI = Math.PI; - - var utils = { - clip_rgb: clip_rgb, - limit: limit, - type: type, - unpack: unpack, - last: last, - PI: PI, - TWOPI: PI*2, - PITHIRD: PI/3, - DEG2RAD: PI / 180, - RAD2DEG: 180 / PI - }; - - var input = { - format: {}, - autodetect: [] - }; - - var last$1 = utils.last; - var clip_rgb$1 = utils.clip_rgb; - var type$1 = utils.type; - - - var Color = function Color() { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - var me = this; - if (type$1(args[0]) === 'object' && - args[0].constructor && - args[0].constructor === this.constructor) { - // the argument is already a Color instance - return args[0]; - } - - // last argument could be the mode - var mode = last$1(args); - var autodetect = false; - - if (!mode) { - autodetect = true; - if (!input.sorted) { - input.autodetect = input.autodetect.sort(function (a,b) { return b.p - a.p; }); - input.sorted = true; - } - // auto-detect format - for (var i = 0, list = input.autodetect; i < list.length; i += 1) { - var chk = list[i]; - - mode = chk.test.apply(chk, args); - if (mode) { break; } - } - } - - if (input.format[mode]) { - var rgb = input.format[mode].apply(null, autodetect ? args : args.slice(0,-1)); - me._rgb = clip_rgb$1(rgb); - } else { - throw new Error('unknown format: '+args); - } - - // add alpha channel - if (me._rgb.length === 3) { me._rgb.push(1); } - }; - - Color.prototype.toString = function toString () { - if (type$1(this.hex) == 'function') { return this.hex(); } - return ("[" + (this._rgb.join(',')) + "]"); - }; - - var Color_1 = Color; - - var chroma = function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - return new (Function.prototype.bind.apply( chroma.Color, [ null ].concat( args) )); - }; - - chroma.Color = Color_1; - chroma.version = '2.1.2'; - - var chroma_1 = chroma; - - var unpack$1 = utils.unpack; - var max = Math.max; - - var rgb2cmyk = function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - var ref = unpack$1(args, 'rgb'); - var r = ref[0]; - var g = ref[1]; - var b = ref[2]; - r = r / 255; - g = g / 255; - b = b / 255; - var k = 1 - max(r,max(g,b)); - var f = k < 1 ? 1 / (1-k) : 0; - var c = (1-r-k) * f; - var m = (1-g-k) * f; - var y = (1-b-k) * f; - return [c,m,y,k]; - }; - - var rgb2cmyk_1 = rgb2cmyk; - - var unpack$2 = utils.unpack; - - var cmyk2rgb = function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - args = unpack$2(args, 'cmyk'); - var c = args[0]; - var m = args[1]; - var y = args[2]; - var k = args[3]; - var alpha = args.length > 4 ? args[4] : 1; - if (k === 1) { return [0,0,0,alpha]; } - return [ - c >= 1 ? 0 : 255 * (1-c) * (1-k), // r - m >= 1 ? 0 : 255 * (1-m) * (1-k), // g - y >= 1 ? 0 : 255 * (1-y) * (1-k), // b - alpha - ]; - }; - - var cmyk2rgb_1 = cmyk2rgb; - - var unpack$3 = utils.unpack; - var type$2 = utils.type; - - - - Color_1.prototype.cmyk = function() { - return rgb2cmyk_1(this._rgb); - }; - - chroma_1.cmyk = function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - return new (Function.prototype.bind.apply( Color_1, [ null ].concat( args, ['cmyk']) )); - }; - - input.format.cmyk = cmyk2rgb_1; - - input.autodetect.push({ - p: 2, - test: function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - args = unpack$3(args, 'cmyk'); - if (type$2(args) === 'array' && args.length === 4) { - return 'cmyk'; - } - } - }); - - var unpack$4 = utils.unpack; - var last$2 = utils.last; - var rnd = function (a) { return Math.round(a*100)/100; }; - - /* - * supported arguments: - * - hsl2css(h,s,l) - * - hsl2css(h,s,l,a) - * - hsl2css([h,s,l], mode) - * - hsl2css([h,s,l,a], mode) - * - hsl2css({h,s,l,a}, mode) - */ - var hsl2css = function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - var hsla = unpack$4(args, 'hsla'); - var mode = last$2(args) || 'lsa'; - hsla[0] = rnd(hsla[0] || 0); - hsla[1] = rnd(hsla[1]*100) + '%'; - hsla[2] = rnd(hsla[2]*100) + '%'; - if (mode === 'hsla' || (hsla.length > 3 && hsla[3]<1)) { - hsla[3] = hsla.length > 3 ? hsla[3] : 1; - mode = 'hsla'; - } else { - hsla.length = 3; - } - return (mode + "(" + (hsla.join(',')) + ")"); - }; - - var hsl2css_1 = hsl2css; - - var unpack$5 = utils.unpack; - - /* - * supported arguments: - * - rgb2hsl(r,g,b) - * - rgb2hsl(r,g,b,a) - * - rgb2hsl([r,g,b]) - * - rgb2hsl([r,g,b,a]) - * - rgb2hsl({r,g,b,a}) - */ - var rgb2hsl = function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - args = unpack$5(args, 'rgba'); - var r = args[0]; - var g = args[1]; - var b = args[2]; - - r /= 255; - g /= 255; - b /= 255; - - var min = Math.min(r, g, b); - var max = Math.max(r, g, b); - - var l = (max + min) / 2; - var s, h; - - if (max === min){ - s = 0; - h = Number.NaN; - } else { - s = l < 0.5 ? (max - min) / (max + min) : (max - min) / (2 - max - min); - } - - if (r == max) { h = (g - b) / (max - min); } - else if (g == max) { h = 2 + (b - r) / (max - min); } - else if (b == max) { h = 4 + (r - g) / (max - min); } - - h *= 60; - if (h < 0) { h += 360; } - if (args.length>3 && args[3]!==undefined) { return [h,s,l,args[3]]; } - return [h,s,l]; - }; - - var rgb2hsl_1 = rgb2hsl; - - var unpack$6 = utils.unpack; - var last$3 = utils.last; - - - var round = Math.round; - - /* - * supported arguments: - * - rgb2css(r,g,b) - * - rgb2css(r,g,b,a) - * - rgb2css([r,g,b], mode) - * - rgb2css([r,g,b,a], mode) - * - rgb2css({r,g,b,a}, mode) - */ - var rgb2css = function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - var rgba = unpack$6(args, 'rgba'); - var mode = last$3(args) || 'rgb'; - if (mode.substr(0,3) == 'hsl') { - return hsl2css_1(rgb2hsl_1(rgba), mode); - } - rgba[0] = round(rgba[0]); - rgba[1] = round(rgba[1]); - rgba[2] = round(rgba[2]); - if (mode === 'rgba' || (rgba.length > 3 && rgba[3]<1)) { - rgba[3] = rgba.length > 3 ? rgba[3] : 1; - mode = 'rgba'; - } - return (mode + "(" + (rgba.slice(0,mode==='rgb'?3:4).join(',')) + ")"); - }; - - var rgb2css_1 = rgb2css; - - var unpack$7 = utils.unpack; - var round$1 = Math.round; - - var hsl2rgb = function () { - var assign; - - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - args = unpack$7(args, 'hsl'); - var h = args[0]; - var s = args[1]; - var l = args[2]; - var r,g,b; - if (s === 0) { - r = g = b = l*255; - } else { - var t3 = [0,0,0]; - var c = [0,0,0]; - var t2 = l < 0.5 ? l * (1+s) : l+s-l*s; - var t1 = 2 * l - t2; - var h_ = h / 360; - t3[0] = h_ + 1/3; - t3[1] = h_; - t3[2] = h_ - 1/3; - for (var i=0; i<3; i++) { - if (t3[i] < 0) { t3[i] += 1; } - if (t3[i] > 1) { t3[i] -= 1; } - if (6 * t3[i] < 1) - { c[i] = t1 + (t2 - t1) * 6 * t3[i]; } - else if (2 * t3[i] < 1) - { c[i] = t2; } - else if (3 * t3[i] < 2) - { c[i] = t1 + (t2 - t1) * ((2 / 3) - t3[i]) * 6; } - else - { c[i] = t1; } - } - (assign = [round$1(c[0]*255),round$1(c[1]*255),round$1(c[2]*255)], r = assign[0], g = assign[1], b = assign[2]); - } - if (args.length > 3) { - // keep alpha channel - return [r,g,b,args[3]]; - } - return [r,g,b,1]; - }; - - var hsl2rgb_1 = hsl2rgb; - - var RE_RGB = /^rgb\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*\)$/; - var RE_RGBA = /^rgba\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*,\s*([01]|[01]?\.\d+)\)$/; - var RE_RGB_PCT = /^rgb\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/; - var RE_RGBA_PCT = /^rgba\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/; - var RE_HSL = /^hsl\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/; - var RE_HSLA = /^hsla\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/; - - var round$2 = Math.round; - - var css2rgb = function (css) { - css = css.toLowerCase().trim(); - var m; - - if (input.format.named) { - try { - return input.format.named(css); - } catch (e) { - // eslint-disable-next-line - } - } - - // rgb(250,20,0) - if ((m = css.match(RE_RGB))) { - var rgb = m.slice(1,4); - for (var i=0; i<3; i++) { - rgb[i] = +rgb[i]; - } - rgb[3] = 1; // default alpha - return rgb; - } - - // rgba(250,20,0,0.4) - if ((m = css.match(RE_RGBA))) { - var rgb$1 = m.slice(1,5); - for (var i$1=0; i$1<4; i$1++) { - rgb$1[i$1] = +rgb$1[i$1]; - } - return rgb$1; - } - - // rgb(100%,0%,0%) - if ((m = css.match(RE_RGB_PCT))) { - var rgb$2 = m.slice(1,4); - for (var i$2=0; i$2<3; i$2++) { - rgb$2[i$2] = round$2(rgb$2[i$2] * 2.55); - } - rgb$2[3] = 1; // default alpha - return rgb$2; - } - - // rgba(100%,0%,0%,0.4) - if ((m = css.match(RE_RGBA_PCT))) { - var rgb$3 = m.slice(1,5); - for (var i$3=0; i$3<3; i$3++) { - rgb$3[i$3] = round$2(rgb$3[i$3] * 2.55); - } - rgb$3[3] = +rgb$3[3]; - return rgb$3; - } - - // hsl(0,100%,50%) - if ((m = css.match(RE_HSL))) { - var hsl = m.slice(1,4); - hsl[1] *= 0.01; - hsl[2] *= 0.01; - var rgb$4 = hsl2rgb_1(hsl); - rgb$4[3] = 1; - return rgb$4; - } - - // hsla(0,100%,50%,0.5) - if ((m = css.match(RE_HSLA))) { - var hsl$1 = m.slice(1,4); - hsl$1[1] *= 0.01; - hsl$1[2] *= 0.01; - var rgb$5 = hsl2rgb_1(hsl$1); - rgb$5[3] = +m[4]; // default alpha = 1 - return rgb$5; - } - }; - - css2rgb.test = function (s) { - return RE_RGB.test(s) || - RE_RGBA.test(s) || - RE_RGB_PCT.test(s) || - RE_RGBA_PCT.test(s) || - RE_HSL.test(s) || - RE_HSLA.test(s); - }; - - var css2rgb_1 = css2rgb; - - var type$3 = utils.type; - - - - - Color_1.prototype.css = function(mode) { - return rgb2css_1(this._rgb, mode); - }; - - chroma_1.css = function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - return new (Function.prototype.bind.apply( Color_1, [ null ].concat( args, ['css']) )); - }; - - input.format.css = css2rgb_1; - - input.autodetect.push({ - p: 5, - test: function (h) { - var rest = [], len = arguments.length - 1; - while ( len-- > 0 ) rest[ len ] = arguments[ len + 1 ]; - - if (!rest.length && type$3(h) === 'string' && css2rgb_1.test(h)) { - return 'css'; - } - } - }); - - var unpack$8 = utils.unpack; - - input.format.gl = function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - var rgb = unpack$8(args, 'rgba'); - rgb[0] *= 255; - rgb[1] *= 255; - rgb[2] *= 255; - return rgb; - }; - - chroma_1.gl = function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - return new (Function.prototype.bind.apply( Color_1, [ null ].concat( args, ['gl']) )); - }; - - Color_1.prototype.gl = function() { - var rgb = this._rgb; - return [rgb[0]/255, rgb[1]/255, rgb[2]/255, rgb[3]]; - }; - - var unpack$9 = utils.unpack; - - var rgb2hcg = function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - var ref = unpack$9(args, 'rgb'); - var r = ref[0]; - var g = ref[1]; - var b = ref[2]; - var min = Math.min(r, g, b); - var max = Math.max(r, g, b); - var delta = max - min; - var c = delta * 100 / 255; - var _g = min / (255 - delta) * 100; - var h; - if (delta === 0) { - h = Number.NaN; - } else { - if (r === max) { h = (g - b) / delta; } - if (g === max) { h = 2+(b - r) / delta; } - if (b === max) { h = 4+(r - g) / delta; } - h *= 60; - if (h < 0) { h += 360; } - } - return [h, c, _g]; - }; - - var rgb2hcg_1 = rgb2hcg; - - var unpack$a = utils.unpack; - var floor = Math.floor; - - /* - * this is basically just HSV with some minor tweaks - * - * hue.. [0..360] - * chroma .. [0..1] - * grayness .. [0..1] - */ - - var hcg2rgb = function () { - var assign, assign$1, assign$2, assign$3, assign$4, assign$5; - - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - args = unpack$a(args, 'hcg'); - var h = args[0]; - var c = args[1]; - var _g = args[2]; - var r,g,b; - _g = _g * 255; - var _c = c * 255; - if (c === 0) { - r = g = b = _g; - } else { - if (h === 360) { h = 0; } - if (h > 360) { h -= 360; } - if (h < 0) { h += 360; } - h /= 60; - var i = floor(h); - var f = h - i; - var p = _g * (1 - c); - var q = p + _c * (1 - f); - var t = p + _c * f; - var v = p + _c; - switch (i) { - case 0: (assign = [v, t, p], r = assign[0], g = assign[1], b = assign[2]); break - case 1: (assign$1 = [q, v, p], r = assign$1[0], g = assign$1[1], b = assign$1[2]); break - case 2: (assign$2 = [p, v, t], r = assign$2[0], g = assign$2[1], b = assign$2[2]); break - case 3: (assign$3 = [p, q, v], r = assign$3[0], g = assign$3[1], b = assign$3[2]); break - case 4: (assign$4 = [t, p, v], r = assign$4[0], g = assign$4[1], b = assign$4[2]); break - case 5: (assign$5 = [v, p, q], r = assign$5[0], g = assign$5[1], b = assign$5[2]); break - } - } - return [r, g, b, args.length > 3 ? args[3] : 1]; - }; - - var hcg2rgb_1 = hcg2rgb; - - var unpack$b = utils.unpack; - var type$4 = utils.type; - - - - - - - Color_1.prototype.hcg = function() { - return rgb2hcg_1(this._rgb); - }; - - chroma_1.hcg = function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - return new (Function.prototype.bind.apply( Color_1, [ null ].concat( args, ['hcg']) )); - }; - - input.format.hcg = hcg2rgb_1; - - input.autodetect.push({ - p: 1, - test: function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - args = unpack$b(args, 'hcg'); - if (type$4(args) === 'array' && args.length === 3) { - return 'hcg'; - } - } - }); - - var unpack$c = utils.unpack; - var last$4 = utils.last; - var round$3 = Math.round; - - var rgb2hex = function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - var ref = unpack$c(args, 'rgba'); - var r = ref[0]; - var g = ref[1]; - var b = ref[2]; - var a = ref[3]; - var mode = last$4(args) || 'auto'; - if (a === undefined) { a = 1; } - if (mode === 'auto') { - mode = a < 1 ? 'rgba' : 'rgb'; - } - r = round$3(r); - g = round$3(g); - b = round$3(b); - var u = r << 16 | g << 8 | b; - var str = "000000" + u.toString(16); //#.toUpperCase(); - str = str.substr(str.length - 6); - var hxa = '0' + round$3(a * 255).toString(16); - hxa = hxa.substr(hxa.length - 2); - switch (mode.toLowerCase()) { - case 'rgba': return ("#" + str + hxa); - case 'argb': return ("#" + hxa + str); - default: return ("#" + str); - } - }; - - var rgb2hex_1 = rgb2hex; - - var RE_HEX = /^#?([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/; - var RE_HEXA = /^#?([A-Fa-f0-9]{8}|[A-Fa-f0-9]{4})$/; - - var hex2rgb = function (hex) { - if (hex.match(RE_HEX)) { - // remove optional leading # - if (hex.length === 4 || hex.length === 7) { - hex = hex.substr(1); - } - // expand short-notation to full six-digit - if (hex.length === 3) { - hex = hex.split(''); - hex = hex[0]+hex[0]+hex[1]+hex[1]+hex[2]+hex[2]; - } - var u = parseInt(hex, 16); - var r = u >> 16; - var g = u >> 8 & 0xFF; - var b = u & 0xFF; - return [r,g,b,1]; - } - - // match rgba hex format, eg #FF000077 - if (hex.match(RE_HEXA)) { - if (hex.length === 5 || hex.length === 9) { - // remove optional leading # - hex = hex.substr(1); - } - // expand short-notation to full eight-digit - if (hex.length === 4) { - hex = hex.split(''); - hex = hex[0]+hex[0]+hex[1]+hex[1]+hex[2]+hex[2]+hex[3]+hex[3]; - } - var u$1 = parseInt(hex, 16); - var r$1 = u$1 >> 24 & 0xFF; - var g$1 = u$1 >> 16 & 0xFF; - var b$1 = u$1 >> 8 & 0xFF; - var a = Math.round((u$1 & 0xFF) / 0xFF * 100) / 100; - return [r$1,g$1,b$1,a]; - } - - // we used to check for css colors here - // if _input.css? and rgb = _input.css hex - // return rgb - - throw new Error(("unknown hex color: " + hex)); - }; - - var hex2rgb_1 = hex2rgb; - - var type$5 = utils.type; - - - - - Color_1.prototype.hex = function(mode) { - return rgb2hex_1(this._rgb, mode); - }; - - chroma_1.hex = function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - return new (Function.prototype.bind.apply( Color_1, [ null ].concat( args, ['hex']) )); - }; - - input.format.hex = hex2rgb_1; - input.autodetect.push({ - p: 4, - test: function (h) { - var rest = [], len = arguments.length - 1; - while ( len-- > 0 ) rest[ len ] = arguments[ len + 1 ]; - - if (!rest.length && type$5(h) === 'string' && [3,4,5,6,7,8,9].indexOf(h.length) >= 0) { - return 'hex'; - } - } - }); - - var unpack$d = utils.unpack; - var TWOPI = utils.TWOPI; - var min = Math.min; - var sqrt = Math.sqrt; - var acos = Math.acos; - - var rgb2hsi = function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - /* - borrowed from here: - http://hummer.stanford.edu/museinfo/doc/examples/humdrum/keyscape2/rgb2hsi.cpp - */ - var ref = unpack$d(args, 'rgb'); - var r = ref[0]; - var g = ref[1]; - var b = ref[2]; - r /= 255; - g /= 255; - b /= 255; - var h; - var min_ = min(r,g,b); - var i = (r+g+b) / 3; - var s = i > 0 ? 1 - min_/i : 0; - if (s === 0) { - h = NaN; - } else { - h = ((r-g)+(r-b)) / 2; - h /= sqrt((r-g)*(r-g) + (r-b)*(g-b)); - h = acos(h); - if (b > g) { - h = TWOPI - h; - } - h /= TWOPI; - } - return [h*360,s,i]; - }; - - var rgb2hsi_1 = rgb2hsi; - - var unpack$e = utils.unpack; - var limit$1 = utils.limit; - var TWOPI$1 = utils.TWOPI; - var PITHIRD = utils.PITHIRD; - var cos = Math.cos; - - /* - * hue [0..360] - * saturation [0..1] - * intensity [0..1] - */ - var hsi2rgb = function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - /* - borrowed from here: - http://hummer.stanford.edu/museinfo/doc/examples/humdrum/keyscape2/hsi2rgb.cpp - */ - args = unpack$e(args, 'hsi'); - var h = args[0]; - var s = args[1]; - var i = args[2]; - var r,g,b; - - if (isNaN(h)) { h = 0; } - if (isNaN(s)) { s = 0; } - // normalize hue - if (h > 360) { h -= 360; } - if (h < 0) { h += 360; } - h /= 360; - if (h < 1/3) { - b = (1-s)/3; - r = (1+s*cos(TWOPI$1*h)/cos(PITHIRD-TWOPI$1*h))/3; - g = 1 - (b+r); - } else if (h < 2/3) { - h -= 1/3; - r = (1-s)/3; - g = (1+s*cos(TWOPI$1*h)/cos(PITHIRD-TWOPI$1*h))/3; - b = 1 - (r+g); - } else { - h -= 2/3; - g = (1-s)/3; - b = (1+s*cos(TWOPI$1*h)/cos(PITHIRD-TWOPI$1*h))/3; - r = 1 - (g+b); - } - r = limit$1(i*r*3); - g = limit$1(i*g*3); - b = limit$1(i*b*3); - return [r*255, g*255, b*255, args.length > 3 ? args[3] : 1]; - }; - - var hsi2rgb_1 = hsi2rgb; - - var unpack$f = utils.unpack; - var type$6 = utils.type; - - - - - - - Color_1.prototype.hsi = function() { - return rgb2hsi_1(this._rgb); - }; - - chroma_1.hsi = function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - return new (Function.prototype.bind.apply( Color_1, [ null ].concat( args, ['hsi']) )); - }; - - input.format.hsi = hsi2rgb_1; - - input.autodetect.push({ - p: 2, - test: function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - args = unpack$f(args, 'hsi'); - if (type$6(args) === 'array' && args.length === 3) { - return 'hsi'; - } - } - }); - - var unpack$g = utils.unpack; - var type$7 = utils.type; - - - - - - - Color_1.prototype.hsl = function() { - return rgb2hsl_1(this._rgb); - }; - - chroma_1.hsl = function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - return new (Function.prototype.bind.apply( Color_1, [ null ].concat( args, ['hsl']) )); - }; - - input.format.hsl = hsl2rgb_1; - - input.autodetect.push({ - p: 2, - test: function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - args = unpack$g(args, 'hsl'); - if (type$7(args) === 'array' && args.length === 3) { - return 'hsl'; - } - } - }); - - var unpack$h = utils.unpack; - var min$1 = Math.min; - var max$1 = Math.max; - - /* - * supported arguments: - * - rgb2hsv(r,g,b) - * - rgb2hsv([r,g,b]) - * - rgb2hsv({r,g,b}) - */ - var rgb2hsl$1 = function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - args = unpack$h(args, 'rgb'); - var r = args[0]; - var g = args[1]; - var b = args[2]; - var min_ = min$1(r, g, b); - var max_ = max$1(r, g, b); - var delta = max_ - min_; - var h,s,v; - v = max_ / 255.0; - if (max_ === 0) { - h = Number.NaN; - s = 0; - } else { - s = delta / max_; - if (r === max_) { h = (g - b) / delta; } - if (g === max_) { h = 2+(b - r) / delta; } - if (b === max_) { h = 4+(r - g) / delta; } - h *= 60; - if (h < 0) { h += 360; } - } - return [h, s, v] - }; - - var rgb2hsv = rgb2hsl$1; - - var unpack$i = utils.unpack; - var floor$1 = Math.floor; - - var hsv2rgb = function () { - var assign, assign$1, assign$2, assign$3, assign$4, assign$5; - - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - args = unpack$i(args, 'hsv'); - var h = args[0]; - var s = args[1]; - var v = args[2]; - var r,g,b; - v *= 255; - if (s === 0) { - r = g = b = v; - } else { - if (h === 360) { h = 0; } - if (h > 360) { h -= 360; } - if (h < 0) { h += 360; } - h /= 60; - - var i = floor$1(h); - var f = h - i; - var p = v * (1 - s); - var q = v * (1 - s * f); - var t = v * (1 - s * (1 - f)); - - switch (i) { - case 0: (assign = [v, t, p], r = assign[0], g = assign[1], b = assign[2]); break - case 1: (assign$1 = [q, v, p], r = assign$1[0], g = assign$1[1], b = assign$1[2]); break - case 2: (assign$2 = [p, v, t], r = assign$2[0], g = assign$2[1], b = assign$2[2]); break - case 3: (assign$3 = [p, q, v], r = assign$3[0], g = assign$3[1], b = assign$3[2]); break - case 4: (assign$4 = [t, p, v], r = assign$4[0], g = assign$4[1], b = assign$4[2]); break - case 5: (assign$5 = [v, p, q], r = assign$5[0], g = assign$5[1], b = assign$5[2]); break - } - } - return [r,g,b,args.length > 3?args[3]:1]; - }; - - var hsv2rgb_1 = hsv2rgb; - - var unpack$j = utils.unpack; - var type$8 = utils.type; - - - - - - - Color_1.prototype.hsv = function() { - return rgb2hsv(this._rgb); - }; - - chroma_1.hsv = function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - return new (Function.prototype.bind.apply( Color_1, [ null ].concat( args, ['hsv']) )); - }; - - input.format.hsv = hsv2rgb_1; - - input.autodetect.push({ - p: 2, - test: function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - args = unpack$j(args, 'hsv'); - if (type$8(args) === 'array' && args.length === 3) { - return 'hsv'; - } - } - }); - - var labConstants = { - // Corresponds roughly to RGB brighter/darker - Kn: 18, - - // D65 standard referent - Xn: 0.950470, - Yn: 1, - Zn: 1.088830, - - t0: 0.137931034, // 4 / 29 - t1: 0.206896552, // 6 / 29 - t2: 0.12841855, // 3 * t1 * t1 - t3: 0.008856452, // t1 * t1 * t1 - }; - - var unpack$k = utils.unpack; - var pow = Math.pow; - - var rgb2lab = function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - var ref = unpack$k(args, 'rgb'); - var r = ref[0]; - var g = ref[1]; - var b = ref[2]; - var ref$1 = rgb2xyz(r,g,b); - var x = ref$1[0]; - var y = ref$1[1]; - var z = ref$1[2]; - var l = 116 * y - 16; - return [l < 0 ? 0 : l, 500 * (x - y), 200 * (y - z)]; - }; - - var rgb_xyz = function (r) { - if ((r /= 255) <= 0.04045) { return r / 12.92; } - return pow((r + 0.055) / 1.055, 2.4); - }; - - var xyz_lab = function (t) { - if (t > labConstants.t3) { return pow(t, 1 / 3); } - return t / labConstants.t2 + labConstants.t0; - }; - - var rgb2xyz = function (r,g,b) { - r = rgb_xyz(r); - g = rgb_xyz(g); - b = rgb_xyz(b); - var x = xyz_lab((0.4124564 * r + 0.3575761 * g + 0.1804375 * b) / labConstants.Xn); - var y = xyz_lab((0.2126729 * r + 0.7151522 * g + 0.0721750 * b) / labConstants.Yn); - var z = xyz_lab((0.0193339 * r + 0.1191920 * g + 0.9503041 * b) / labConstants.Zn); - return [x,y,z]; - }; - - var rgb2lab_1 = rgb2lab; - - var unpack$l = utils.unpack; - var pow$1 = Math.pow; - - /* - * L* [0..100] - * a [-100..100] - * b [-100..100] - */ - var lab2rgb = function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - args = unpack$l(args, 'lab'); - var l = args[0]; - var a = args[1]; - var b = args[2]; - var x,y,z, r,g,b_; - - y = (l + 16) / 116; - x = isNaN(a) ? y : y + a / 500; - z = isNaN(b) ? y : y - b / 200; - - y = labConstants.Yn * lab_xyz(y); - x = labConstants.Xn * lab_xyz(x); - z = labConstants.Zn * lab_xyz(z); - - r = xyz_rgb(3.2404542 * x - 1.5371385 * y - 0.4985314 * z); // D65 -> sRGB - g = xyz_rgb(-0.9692660 * x + 1.8760108 * y + 0.0415560 * z); - b_ = xyz_rgb(0.0556434 * x - 0.2040259 * y + 1.0572252 * z); - - return [r,g,b_,args.length > 3 ? args[3] : 1]; - }; - - var xyz_rgb = function (r) { - return 255 * (r <= 0.00304 ? 12.92 * r : 1.055 * pow$1(r, 1 / 2.4) - 0.055) - }; - - var lab_xyz = function (t) { - return t > labConstants.t1 ? t * t * t : labConstants.t2 * (t - labConstants.t0) - }; - - var lab2rgb_1 = lab2rgb; - - var unpack$m = utils.unpack; - var type$9 = utils.type; - - - - - - - Color_1.prototype.lab = function() { - return rgb2lab_1(this._rgb); - }; - - chroma_1.lab = function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - return new (Function.prototype.bind.apply( Color_1, [ null ].concat( args, ['lab']) )); - }; - - input.format.lab = lab2rgb_1; - - input.autodetect.push({ - p: 2, - test: function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - args = unpack$m(args, 'lab'); - if (type$9(args) === 'array' && args.length === 3) { - return 'lab'; - } - } - }); - - var unpack$n = utils.unpack; - var RAD2DEG = utils.RAD2DEG; - var sqrt$1 = Math.sqrt; - var atan2 = Math.atan2; - var round$4 = Math.round; - - var lab2lch = function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - var ref = unpack$n(args, 'lab'); - var l = ref[0]; - var a = ref[1]; - var b = ref[2]; - var c = sqrt$1(a * a + b * b); - var h = (atan2(b, a) * RAD2DEG + 360) % 360; - if (round$4(c*10000) === 0) { h = Number.NaN; } - return [l, c, h]; - }; - - var lab2lch_1 = lab2lch; - - var unpack$o = utils.unpack; - - - - var rgb2lch = function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - var ref = unpack$o(args, 'rgb'); - var r = ref[0]; - var g = ref[1]; - var b = ref[2]; - var ref$1 = rgb2lab_1(r,g,b); - var l = ref$1[0]; - var a = ref$1[1]; - var b_ = ref$1[2]; - return lab2lch_1(l,a,b_); - }; - - var rgb2lch_1 = rgb2lch; - - var unpack$p = utils.unpack; - var DEG2RAD = utils.DEG2RAD; - var sin = Math.sin; - var cos$1 = Math.cos; - - var lch2lab = function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - /* - Convert from a qualitative parameter h and a quantitative parameter l to a 24-bit pixel. - These formulas were invented by David Dalrymple to obtain maximum contrast without going - out of gamut if the parameters are in the range 0-1. - - A saturation multiplier was added by Gregor Aisch - */ - var ref = unpack$p(args, 'lch'); - var l = ref[0]; - var c = ref[1]; - var h = ref[2]; - if (isNaN(h)) { h = 0; } - h = h * DEG2RAD; - return [l, cos$1(h) * c, sin(h) * c] - }; - - var lch2lab_1 = lch2lab; - - var unpack$q = utils.unpack; - - - - var lch2rgb = function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - args = unpack$q(args, 'lch'); - var l = args[0]; - var c = args[1]; - var h = args[2]; - var ref = lch2lab_1 (l,c,h); - var L = ref[0]; - var a = ref[1]; - var b_ = ref[2]; - var ref$1 = lab2rgb_1 (L,a,b_); - var r = ref$1[0]; - var g = ref$1[1]; - var b = ref$1[2]; - return [r, g, b, args.length > 3 ? args[3] : 1]; - }; - - var lch2rgb_1 = lch2rgb; - - var unpack$r = utils.unpack; - - - var hcl2rgb = function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - var hcl = unpack$r(args, 'hcl').reverse(); - return lch2rgb_1.apply(void 0, hcl); - }; - - var hcl2rgb_1 = hcl2rgb; - - var unpack$s = utils.unpack; - var type$a = utils.type; - - - - - - - Color_1.prototype.lch = function() { return rgb2lch_1(this._rgb); }; - Color_1.prototype.hcl = function() { return rgb2lch_1(this._rgb).reverse(); }; - - chroma_1.lch = function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - return new (Function.prototype.bind.apply( Color_1, [ null ].concat( args, ['lch']) )); - }; - chroma_1.hcl = function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - return new (Function.prototype.bind.apply( Color_1, [ null ].concat( args, ['hcl']) )); - }; - - input.format.lch = lch2rgb_1; - input.format.hcl = hcl2rgb_1; - - ['lch','hcl'].forEach(function (m) { return input.autodetect.push({ - p: 2, - test: function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - args = unpack$s(args, m); - if (type$a(args) === 'array' && args.length === 3) { - return m; - } - } - }); }); - - /** - X11 color names - - http://www.w3.org/TR/css3-color/#svg-color - */ - - var w3cx11 = { - aliceblue: '#f0f8ff', - antiquewhite: '#faebd7', - aqua: '#00ffff', - aquamarine: '#7fffd4', - azure: '#f0ffff', - beige: '#f5f5dc', - bisque: '#ffe4c4', - black: '#000000', - blanchedalmond: '#ffebcd', - blue: '#0000ff', - blueviolet: '#8a2be2', - brown: '#a52a2a', - burlywood: '#deb887', - cadetblue: '#5f9ea0', - chartreuse: '#7fff00', - chocolate: '#d2691e', - coral: '#ff7f50', - cornflower: '#6495ed', - cornflowerblue: '#6495ed', - cornsilk: '#fff8dc', - crimson: '#dc143c', - cyan: '#00ffff', - darkblue: '#00008b', - darkcyan: '#008b8b', - darkgoldenrod: '#b8860b', - darkgray: '#a9a9a9', - darkgreen: '#006400', - darkgrey: '#a9a9a9', - darkkhaki: '#bdb76b', - darkmagenta: '#8b008b', - darkolivegreen: '#556b2f', - darkorange: '#ff8c00', - darkorchid: '#9932cc', - darkred: '#8b0000', - darksalmon: '#e9967a', - darkseagreen: '#8fbc8f', - darkslateblue: '#483d8b', - darkslategray: '#2f4f4f', - darkslategrey: '#2f4f4f', - darkturquoise: '#00ced1', - darkviolet: '#9400d3', - deeppink: '#ff1493', - deepskyblue: '#00bfff', - dimgray: '#696969', - dimgrey: '#696969', - dodgerblue: '#1e90ff', - firebrick: '#b22222', - floralwhite: '#fffaf0', - forestgreen: '#228b22', - fuchsia: '#ff00ff', - gainsboro: '#dcdcdc', - ghostwhite: '#f8f8ff', - gold: '#ffd700', - goldenrod: '#daa520', - gray: '#808080', - green: '#008000', - greenyellow: '#adff2f', - grey: '#808080', - honeydew: '#f0fff0', - hotpink: '#ff69b4', - indianred: '#cd5c5c', - indigo: '#4b0082', - ivory: '#fffff0', - khaki: '#f0e68c', - laserlemon: '#ffff54', - lavender: '#e6e6fa', - lavenderblush: '#fff0f5', - lawngreen: '#7cfc00', - lemonchiffon: '#fffacd', - lightblue: '#add8e6', - lightcoral: '#f08080', - lightcyan: '#e0ffff', - lightgoldenrod: '#fafad2', - lightgoldenrodyellow: '#fafad2', - lightgray: '#d3d3d3', - lightgreen: '#90ee90', - lightgrey: '#d3d3d3', - lightpink: '#ffb6c1', - lightsalmon: '#ffa07a', - lightseagreen: '#20b2aa', - lightskyblue: '#87cefa', - lightslategray: '#778899', - lightslategrey: '#778899', - lightsteelblue: '#b0c4de', - lightyellow: '#ffffe0', - lime: '#00ff00', - limegreen: '#32cd32', - linen: '#faf0e6', - magenta: '#ff00ff', - maroon: '#800000', - maroon2: '#7f0000', - maroon3: '#b03060', - mediumaquamarine: '#66cdaa', - mediumblue: '#0000cd', - mediumorchid: '#ba55d3', - mediumpurple: '#9370db', - mediumseagreen: '#3cb371', - mediumslateblue: '#7b68ee', - mediumspringgreen: '#00fa9a', - mediumturquoise: '#48d1cc', - mediumvioletred: '#c71585', - midnightblue: '#191970', - mintcream: '#f5fffa', - mistyrose: '#ffe4e1', - moccasin: '#ffe4b5', - navajowhite: '#ffdead', - navy: '#000080', - oldlace: '#fdf5e6', - olive: '#808000', - olivedrab: '#6b8e23', - orange: '#ffa500', - orangered: '#ff4500', - orchid: '#da70d6', - palegoldenrod: '#eee8aa', - palegreen: '#98fb98', - paleturquoise: '#afeeee', - palevioletred: '#db7093', - papayawhip: '#ffefd5', - peachpuff: '#ffdab9', - peru: '#cd853f', - pink: '#ffc0cb', - plum: '#dda0dd', - powderblue: '#b0e0e6', - purple: '#800080', - purple2: '#7f007f', - purple3: '#a020f0', - rebeccapurple: '#663399', - red: '#ff0000', - rosybrown: '#bc8f8f', - royalblue: '#4169e1', - saddlebrown: '#8b4513', - salmon: '#fa8072', - sandybrown: '#f4a460', - seagreen: '#2e8b57', - seashell: '#fff5ee', - sienna: '#a0522d', - silver: '#c0c0c0', - skyblue: '#87ceeb', - slateblue: '#6a5acd', - slategray: '#708090', - slategrey: '#708090', - snow: '#fffafa', - springgreen: '#00ff7f', - steelblue: '#4682b4', - tan: '#d2b48c', - teal: '#008080', - thistle: '#d8bfd8', - tomato: '#ff6347', - turquoise: '#40e0d0', - violet: '#ee82ee', - wheat: '#f5deb3', - white: '#ffffff', - whitesmoke: '#f5f5f5', - yellow: '#ffff00', - yellowgreen: '#9acd32' - }; - - var w3cx11_1 = w3cx11; - - var type$b = utils.type; - - - - - - Color_1.prototype.name = function() { - var hex = rgb2hex_1(this._rgb, 'rgb'); - for (var i = 0, list = Object.keys(w3cx11_1); i < list.length; i += 1) { - var n = list[i]; - - if (w3cx11_1[n] === hex) { return n.toLowerCase(); } - } - return hex; - }; - - input.format.named = function (name) { - name = name.toLowerCase(); - if (w3cx11_1[name]) { return hex2rgb_1(w3cx11_1[name]); } - throw new Error('unknown color name: '+name); - }; - - input.autodetect.push({ - p: 5, - test: function (h) { - var rest = [], len = arguments.length - 1; - while ( len-- > 0 ) rest[ len ] = arguments[ len + 1 ]; - - if (!rest.length && type$b(h) === 'string' && w3cx11_1[h.toLowerCase()]) { - return 'named'; - } - } - }); - - var unpack$t = utils.unpack; - - var rgb2num = function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - var ref = unpack$t(args, 'rgb'); - var r = ref[0]; - var g = ref[1]; - var b = ref[2]; - return (r << 16) + (g << 8) + b; - }; - - var rgb2num_1 = rgb2num; - - var type$c = utils.type; - - var num2rgb = function (num) { - if (type$c(num) == "number" && num >= 0 && num <= 0xFFFFFF) { - var r = num >> 16; - var g = (num >> 8) & 0xFF; - var b = num & 0xFF; - return [r,g,b,1]; - } - throw new Error("unknown num color: "+num); - }; - - var num2rgb_1 = num2rgb; - - var type$d = utils.type; - - - - Color_1.prototype.num = function() { - return rgb2num_1(this._rgb); - }; - - chroma_1.num = function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - return new (Function.prototype.bind.apply( Color_1, [ null ].concat( args, ['num']) )); - }; - - input.format.num = num2rgb_1; - - input.autodetect.push({ - p: 5, - test: function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - if (args.length === 1 && type$d(args[0]) === 'number' && args[0] >= 0 && args[0] <= 0xFFFFFF) { - return 'num'; - } - } - }); - - var unpack$u = utils.unpack; - var type$e = utils.type; - var round$5 = Math.round; - - Color_1.prototype.rgb = function(rnd) { - if ( rnd === void 0 ) rnd=true; - - if (rnd === false) { return this._rgb.slice(0,3); } - return this._rgb.slice(0,3).map(round$5); - }; - - Color_1.prototype.rgba = function(rnd) { - if ( rnd === void 0 ) rnd=true; - - return this._rgb.slice(0,4).map(function (v,i) { - return i<3 ? (rnd === false ? v : round$5(v)) : v; - }); - }; - - chroma_1.rgb = function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - return new (Function.prototype.bind.apply( Color_1, [ null ].concat( args, ['rgb']) )); - }; - - input.format.rgb = function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - var rgba = unpack$u(args, 'rgba'); - if (rgba[3] === undefined) { rgba[3] = 1; } - return rgba; - }; - - input.autodetect.push({ - p: 3, - test: function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - args = unpack$u(args, 'rgba'); - if (type$e(args) === 'array' && (args.length === 3 || - args.length === 4 && type$e(args[3]) == 'number' && args[3] >= 0 && args[3] <= 1)) { - return 'rgb'; - } - } - }); - - /* - * Based on implementation by Neil Bartlett - * https://github.com/neilbartlett/color-temperature - */ - - var log = Math.log; - - var temperature2rgb = function (kelvin) { - var temp = kelvin / 100; - var r,g,b; - if (temp < 66) { - r = 255; - g = -155.25485562709179 - 0.44596950469579133 * (g = temp-2) + 104.49216199393888 * log(g); - b = temp < 20 ? 0 : -254.76935184120902 + 0.8274096064007395 * (b = temp-10) + 115.67994401066147 * log(b); - } else { - r = 351.97690566805693 + 0.114206453784165 * (r = temp-55) - 40.25366309332127 * log(r); - g = 325.4494125711974 + 0.07943456536662342 * (g = temp-50) - 28.0852963507957 * log(g); - b = 255; - } - return [r,g,b,1]; - }; - - var temperature2rgb_1 = temperature2rgb; - - /* - * Based on implementation by Neil Bartlett - * https://github.com/neilbartlett/color-temperature - **/ - - - var unpack$v = utils.unpack; - var round$6 = Math.round; - - var rgb2temperature = function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - var rgb = unpack$v(args, 'rgb'); - var r = rgb[0], b = rgb[2]; - var minTemp = 1000; - var maxTemp = 40000; - var eps = 0.4; - var temp; - while (maxTemp - minTemp > eps) { - temp = (maxTemp + minTemp) * 0.5; - var rgb$1 = temperature2rgb_1(temp); - if ((rgb$1[2] / rgb$1[0]) >= (b / r)) { - maxTemp = temp; - } else { - minTemp = temp; - } - } - return round$6(temp); - }; - - var rgb2temperature_1 = rgb2temperature; - - Color_1.prototype.temp = - Color_1.prototype.kelvin = - Color_1.prototype.temperature = function() { - return rgb2temperature_1(this._rgb); - }; - - chroma_1.temp = - chroma_1.kelvin = - chroma_1.temperature = function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - return new (Function.prototype.bind.apply( Color_1, [ null ].concat( args, ['temp']) )); - }; - - input.format.temp = - input.format.kelvin = - input.format.temperature = temperature2rgb_1; - - var type$f = utils.type; - - Color_1.prototype.alpha = function(a, mutate) { - if ( mutate === void 0 ) mutate=false; - - if (a !== undefined && type$f(a) === 'number') { - if (mutate) { - this._rgb[3] = a; - return this; - } - return new Color_1([this._rgb[0], this._rgb[1], this._rgb[2], a], 'rgb'); - } - return this._rgb[3]; - }; - - Color_1.prototype.clipped = function() { - return this._rgb._clipped || false; - }; - - Color_1.prototype.darken = function(amount) { - if ( amount === void 0 ) amount=1; - - var me = this; - var lab = me.lab(); - lab[0] -= labConstants.Kn * amount; - return new Color_1(lab, 'lab').alpha(me.alpha(), true); - }; - - Color_1.prototype.brighten = function(amount) { - if ( amount === void 0 ) amount=1; - - return this.darken(-amount); - }; - - Color_1.prototype.darker = Color_1.prototype.darken; - Color_1.prototype.brighter = Color_1.prototype.brighten; - - Color_1.prototype.get = function(mc) { - var ref = mc.split('.'); - var mode = ref[0]; - var channel = ref[1]; - var src = this[mode](); - if (channel) { - var i = mode.indexOf(channel); - if (i > -1) { return src[i]; } - throw new Error(("unknown channel " + channel + " in mode " + mode)); - } else { - return src; - } - }; - - var type$g = utils.type; - var pow$2 = Math.pow; - - var EPS = 1e-7; - var MAX_ITER = 20; - - Color_1.prototype.luminance = function(lum) { - if (lum !== undefined && type$g(lum) === 'number') { - if (lum === 0) { - // return pure black - return new Color_1([0,0,0,this._rgb[3]], 'rgb'); - } - if (lum === 1) { - // return pure white - return new Color_1([255,255,255,this._rgb[3]], 'rgb'); - } - // compute new color using... - var cur_lum = this.luminance(); - var mode = 'rgb'; - var max_iter = MAX_ITER; - - var test = function (low, high) { - var mid = low.interpolate(high, 0.5, mode); - var lm = mid.luminance(); - if (Math.abs(lum - lm) < EPS || !max_iter--) { - // close enough - return mid; - } - return lm > lum ? test(low, mid) : test(mid, high); - }; - - var rgb = (cur_lum > lum ? test(new Color_1([0,0,0]), this) : test(this, new Color_1([255,255,255]))).rgb(); - return new Color_1(rgb.concat( [this._rgb[3]])); - } - return rgb2luminance.apply(void 0, (this._rgb).slice(0,3)); - }; - - - var rgb2luminance = function (r,g,b) { - // relative luminance - // see http://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef - r = luminance_x(r); - g = luminance_x(g); - b = luminance_x(b); - return 0.2126 * r + 0.7152 * g + 0.0722 * b; - }; - - var luminance_x = function (x) { - x /= 255; - return x <= 0.03928 ? x/12.92 : pow$2((x+0.055)/1.055, 2.4); - }; - - var interpolator = {}; - - var type$h = utils.type; - - - var mix = function (col1, col2, f) { - if ( f === void 0 ) f=0.5; - var rest = [], len = arguments.length - 3; - while ( len-- > 0 ) rest[ len ] = arguments[ len + 3 ]; - - var mode = rest[0] || 'lrgb'; - if (!interpolator[mode] && !rest.length) { - // fall back to the first supported mode - mode = Object.keys(interpolator)[0]; - } - if (!interpolator[mode]) { - throw new Error(("interpolation mode " + mode + " is not defined")); - } - if (type$h(col1) !== 'object') { col1 = new Color_1(col1); } - if (type$h(col2) !== 'object') { col2 = new Color_1(col2); } - return interpolator[mode](col1, col2, f) - .alpha(col1.alpha() + f * (col2.alpha() - col1.alpha())); - }; - - Color_1.prototype.mix = - Color_1.prototype.interpolate = function(col2, f) { - if ( f === void 0 ) f=0.5; - var rest = [], len = arguments.length - 2; - while ( len-- > 0 ) rest[ len ] = arguments[ len + 2 ]; - - return mix.apply(void 0, [ this, col2, f ].concat( rest )); - }; - - Color_1.prototype.premultiply = function(mutate) { - if ( mutate === void 0 ) mutate=false; - - var rgb = this._rgb; - var a = rgb[3]; - if (mutate) { - this._rgb = [rgb[0]*a, rgb[1]*a, rgb[2]*a, a]; - return this; - } else { - return new Color_1([rgb[0]*a, rgb[1]*a, rgb[2]*a, a], 'rgb'); - } - }; - - Color_1.prototype.saturate = function(amount) { - if ( amount === void 0 ) amount=1; - - var me = this; - var lch = me.lch(); - lch[1] += labConstants.Kn * amount; - if (lch[1] < 0) { lch[1] = 0; } - return new Color_1(lch, 'lch').alpha(me.alpha(), true); - }; - - Color_1.prototype.desaturate = function(amount) { - if ( amount === void 0 ) amount=1; - - return this.saturate(-amount); - }; - - var type$i = utils.type; - - Color_1.prototype.set = function(mc, value, mutate) { - if ( mutate === void 0 ) mutate=false; - - var ref = mc.split('.'); - var mode = ref[0]; - var channel = ref[1]; - var src = this[mode](); - if (channel) { - var i = mode.indexOf(channel); - if (i > -1) { - if (type$i(value) == 'string') { - switch(value.charAt(0)) { - case '+': src[i] += +value; break; - case '-': src[i] += +value; break; - case '*': src[i] *= +(value.substr(1)); break; - case '/': src[i] /= +(value.substr(1)); break; - default: src[i] = +value; - } - } else if (type$i(value) === 'number') { - src[i] = value; - } else { - throw new Error("unsupported value for Color.set"); - } - var out = new Color_1(src, mode); - if (mutate) { - this._rgb = out._rgb; - return this; - } - return out; - } - throw new Error(("unknown channel " + channel + " in mode " + mode)); - } else { - return src; - } - }; - - var rgb$1 = function (col1, col2, f) { - var xyz0 = col1._rgb; - var xyz1 = col2._rgb; - return new Color_1( - xyz0[0] + f * (xyz1[0]-xyz0[0]), - xyz0[1] + f * (xyz1[1]-xyz0[1]), - xyz0[2] + f * (xyz1[2]-xyz0[2]), - 'rgb' - ) - }; - - // register interpolator - interpolator.rgb = rgb$1; - - var sqrt$2 = Math.sqrt; - var pow$3 = Math.pow; - - var lrgb = function (col1, col2, f) { - var ref = col1._rgb; - var x1 = ref[0]; - var y1 = ref[1]; - var z1 = ref[2]; - var ref$1 = col2._rgb; - var x2 = ref$1[0]; - var y2 = ref$1[1]; - var z2 = ref$1[2]; - return new Color_1( - sqrt$2(pow$3(x1,2) * (1-f) + pow$3(x2,2) * f), - sqrt$2(pow$3(y1,2) * (1-f) + pow$3(y2,2) * f), - sqrt$2(pow$3(z1,2) * (1-f) + pow$3(z2,2) * f), - 'rgb' - ) - }; - - // register interpolator - interpolator.lrgb = lrgb; - - var lab$1 = function (col1, col2, f) { - var xyz0 = col1.lab(); - var xyz1 = col2.lab(); - return new Color_1( - xyz0[0] + f * (xyz1[0]-xyz0[0]), - xyz0[1] + f * (xyz1[1]-xyz0[1]), - xyz0[2] + f * (xyz1[2]-xyz0[2]), - 'lab' - ) - }; - - // register interpolator - interpolator.lab = lab$1; - - var _hsx = function (col1, col2, f, m) { - var assign, assign$1; - - var xyz0, xyz1; - if (m === 'hsl') { - xyz0 = col1.hsl(); - xyz1 = col2.hsl(); - } else if (m === 'hsv') { - xyz0 = col1.hsv(); - xyz1 = col2.hsv(); - } else if (m === 'hcg') { - xyz0 = col1.hcg(); - xyz1 = col2.hcg(); - } else if (m === 'hsi') { - xyz0 = col1.hsi(); - xyz1 = col2.hsi(); - } else if (m === 'lch' || m === 'hcl') { - m = 'hcl'; - xyz0 = col1.hcl(); - xyz1 = col2.hcl(); - } - - var hue0, hue1, sat0, sat1, lbv0, lbv1; - if (m.substr(0, 1) === 'h') { - (assign = xyz0, hue0 = assign[0], sat0 = assign[1], lbv0 = assign[2]); - (assign$1 = xyz1, hue1 = assign$1[0], sat1 = assign$1[1], lbv1 = assign$1[2]); - } - - var sat, hue, lbv, dh; - - if (!isNaN(hue0) && !isNaN(hue1)) { - // both colors have hue - if (hue1 > hue0 && hue1 - hue0 > 180) { - dh = hue1-(hue0+360); - } else if (hue1 < hue0 && hue0 - hue1 > 180) { - dh = hue1+360-hue0; - } else { - dh = hue1 - hue0; - } - hue = hue0 + f * dh; - } else if (!isNaN(hue0)) { - hue = hue0; - if ((lbv1 == 1 || lbv1 == 0) && m != 'hsv') { sat = sat0; } - } else if (!isNaN(hue1)) { - hue = hue1; - if ((lbv0 == 1 || lbv0 == 0) && m != 'hsv') { sat = sat1; } - } else { - hue = Number.NaN; - } - - if (sat === undefined) { sat = sat0 + f * (sat1 - sat0); } - lbv = lbv0 + f * (lbv1-lbv0); - return new Color_1([hue, sat, lbv], m); - }; - - var lch$1 = function (col1, col2, f) { - return _hsx(col1, col2, f, 'lch'); - }; - - // register interpolator - interpolator.lch = lch$1; - interpolator.hcl = lch$1; - - var num$1 = function (col1, col2, f) { - var c1 = col1.num(); - var c2 = col2.num(); - return new Color_1(c1 + f * (c2-c1), 'num') - }; - - // register interpolator - interpolator.num = num$1; - - var hcg$1 = function (col1, col2, f) { - return _hsx(col1, col2, f, 'hcg'); - }; - - // register interpolator - interpolator.hcg = hcg$1; - - var hsi$1 = function (col1, col2, f) { - return _hsx(col1, col2, f, 'hsi'); - }; - - // register interpolator - interpolator.hsi = hsi$1; - - var hsl$1 = function (col1, col2, f) { - return _hsx(col1, col2, f, 'hsl'); - }; - - // register interpolator - interpolator.hsl = hsl$1; - - var hsv$1 = function (col1, col2, f) { - return _hsx(col1, col2, f, 'hsv'); - }; - - // register interpolator - interpolator.hsv = hsv$1; - - var clip_rgb$2 = utils.clip_rgb; - var pow$4 = Math.pow; - var sqrt$3 = Math.sqrt; - var PI$1 = Math.PI; - var cos$2 = Math.cos; - var sin$1 = Math.sin; - var atan2$1 = Math.atan2; - - var average = function (colors, mode, weights) { - if ( mode === void 0 ) mode='lrgb'; - if ( weights === void 0 ) weights=null; - - var l = colors.length; - if (!weights) { weights = Array.from(new Array(l)).map(function () { return 1; }); } - // normalize weights - var k = l / weights.reduce(function(a, b) { return a + b; }); - weights.forEach(function (w,i) { weights[i] *= k; }); - // convert colors to Color objects - colors = colors.map(function (c) { return new Color_1(c); }); - if (mode === 'lrgb') { - return _average_lrgb(colors, weights) - } - var first = colors.shift(); - var xyz = first.get(mode); - var cnt = []; - var dx = 0; - var dy = 0; - // initial color - for (var i=0; i= 360) { A$1 -= 360; } - xyz[i$1] = A$1; - } else { - xyz[i$1] = xyz[i$1]/cnt[i$1]; - } - } - alpha /= l; - return (new Color_1(xyz, mode)).alpha(alpha > 0.99999 ? 1 : alpha, true); - }; - - - var _average_lrgb = function (colors, weights) { - var l = colors.length; - var xyz = [0,0,0,0]; - for (var i=0; i < colors.length; i++) { - var col = colors[i]; - var f = weights[i] / l; - var rgb = col._rgb; - xyz[0] += pow$4(rgb[0],2) * f; - xyz[1] += pow$4(rgb[1],2) * f; - xyz[2] += pow$4(rgb[2],2) * f; - xyz[3] += rgb[3] * f; - } - xyz[0] = sqrt$3(xyz[0]); - xyz[1] = sqrt$3(xyz[1]); - xyz[2] = sqrt$3(xyz[2]); - if (xyz[3] > 0.9999999) { xyz[3] = 1; } - return new Color_1(clip_rgb$2(xyz)); - }; - - // minimal multi-purpose interface - - // @requires utils color analyze - - - var type$j = utils.type; - - var pow$5 = Math.pow; - - var scale = function(colors) { - - // constructor - var _mode = 'rgb'; - var _nacol = chroma_1('#ccc'); - var _spread = 0; - // const _fixed = false; - var _domain = [0, 1]; - var _pos = []; - var _padding = [0,0]; - var _classes = false; - var _colors = []; - var _out = false; - var _min = 0; - var _max = 1; - var _correctLightness = false; - var _colorCache = {}; - var _useCache = true; - var _gamma = 1; - - // private methods - - var setColors = function(colors) { - colors = colors || ['#fff', '#000']; - if (colors && type$j(colors) === 'string' && chroma_1.brewer && - chroma_1.brewer[colors.toLowerCase()]) { - colors = chroma_1.brewer[colors.toLowerCase()]; - } - if (type$j(colors) === 'array') { - // handle single color - if (colors.length === 1) { - colors = [colors[0], colors[0]]; - } - // make a copy of the colors - colors = colors.slice(0); - // convert to chroma classes - for (var c=0; c= _classes[i]) { - i++; - } - return i-1; - } - return 0; - }; - - var tMapLightness = function (t) { return t; }; - var tMapDomain = function (t) { return t; }; - - // const classifyValue = function(value) { - // let val = value; - // if (_classes.length > 2) { - // const n = _classes.length-1; - // const i = getClass(value); - // const minc = _classes[0] + ((_classes[1]-_classes[0]) * (0 + (_spread * 0.5))); // center of 1st class - // const maxc = _classes[n-1] + ((_classes[n]-_classes[n-1]) * (1 - (_spread * 0.5))); // center of last class - // val = _min + ((((_classes[i] + ((_classes[i+1] - _classes[i]) * 0.5)) - minc) / (maxc-minc)) * (_max - _min)); - // } - // return val; - // }; - - var getColor = function(val, bypassMap) { - var col, t; - if (bypassMap == null) { bypassMap = false; } - if (isNaN(val) || (val === null)) { return _nacol; } - if (!bypassMap) { - if (_classes && (_classes.length > 2)) { - // find the class - var c = getClass(val); - t = c / (_classes.length-2); - } else if (_max !== _min) { - // just interpolate between min/max - t = (val - _min) / (_max - _min); - } else { - t = 1; - } - } else { - t = val; - } - - // domain map - t = tMapDomain(t); - - if (!bypassMap) { - t = tMapLightness(t); // lightness correction - } - - if (_gamma !== 1) { t = pow$5(t, _gamma); } - - t = _padding[0] + (t * (1 - _padding[0] - _padding[1])); - - t = Math.min(1, Math.max(0, t)); - - var k = Math.floor(t * 10000); - - if (_useCache && _colorCache[k]) { - col = _colorCache[k]; - } else { - if (type$j(_colors) === 'array') { - //for i in [0.._pos.length-1] - for (var i=0; i<_pos.length; i++) { - var p = _pos[i]; - if (t <= p) { - col = _colors[i]; - break; - } - if ((t >= p) && (i === (_pos.length-1))) { - col = _colors[i]; - break; - } - if (t > p && t < _pos[i+1]) { - t = (t-p)/(_pos[i+1]-p); - col = chroma_1.interpolate(_colors[i], _colors[i+1], t, _mode); - break; - } - } - } else if (type$j(_colors) === 'function') { - col = _colors(t); - } - if (_useCache) { _colorCache[k] = col; } - } - return col; - }; - - var resetCache = function () { return _colorCache = {}; }; - - setColors(colors); - - // public interface - - var f = function(v) { - var c = chroma_1(getColor(v)); - if (_out && c[_out]) { return c[_out](); } else { return c; } - }; - - f.classes = function(classes) { - if (classes != null) { - if (type$j(classes) === 'array') { - _classes = classes; - _domain = [classes[0], classes[classes.length-1]]; - } else { - var d = chroma_1.analyze(_domain); - if (classes === 0) { - _classes = [d.min, d.max]; - } else { - _classes = chroma_1.limits(d, 'e', classes); - } - } - return f; - } - return _classes; - }; - - - f.domain = function(domain) { - if (!arguments.length) { - return _domain; - } - _min = domain[0]; - _max = domain[domain.length-1]; - _pos = []; - var k = _colors.length; - if ((domain.length === k) && (_min !== _max)) { - // update positions - for (var i = 0, list = Array.from(domain); i < list.length; i += 1) { - var d = list[i]; - - _pos.push((d-_min) / (_max-_min)); - } - } else { - for (var c=0; c 2) { - // set domain map - var tOut = domain.map(function (d,i) { return i/(domain.length-1); }); - var tBreaks = domain.map(function (d) { return (d - _min) / (_max - _min); }); - if (!tBreaks.every(function (val, i) { return tOut[i] === val; })) { - tMapDomain = function (t) { - if (t <= 0 || t >= 1) { return t; } - var i = 0; - while (t >= tBreaks[i+1]) { i++; } - var f = (t - tBreaks[i]) / (tBreaks[i+1] - tBreaks[i]); - var out = tOut[i] + f * (tOut[i+1] - tOut[i]); - return out; - }; - } - - } - } - _domain = [_min, _max]; - return f; - }; - - f.mode = function(_m) { - if (!arguments.length) { - return _mode; - } - _mode = _m; - resetCache(); - return f; - }; - - f.range = function(colors, _pos) { - setColors(colors); - return f; - }; - - f.out = function(_o) { - _out = _o; - return f; - }; - - f.spread = function(val) { - if (!arguments.length) { - return _spread; - } - _spread = val; - return f; - }; - - f.correctLightness = function(v) { - if (v == null) { v = true; } - _correctLightness = v; - resetCache(); - if (_correctLightness) { - tMapLightness = function(t) { - var L0 = getColor(0, true).lab()[0]; - var L1 = getColor(1, true).lab()[0]; - var pol = L0 > L1; - var L_actual = getColor(t, true).lab()[0]; - var L_ideal = L0 + ((L1 - L0) * t); - var L_diff = L_actual - L_ideal; - var t0 = 0; - var t1 = 1; - var max_iter = 20; - while ((Math.abs(L_diff) > 1e-2) && (max_iter-- > 0)) { - (function() { - if (pol) { L_diff *= -1; } - if (L_diff < 0) { - t0 = t; - t += (t1 - t) * 0.5; - } else { - t1 = t; - t += (t0 - t) * 0.5; - } - L_actual = getColor(t, true).lab()[0]; - return L_diff = L_actual - L_ideal; - })(); - } - return t; - }; - } else { - tMapLightness = function (t) { return t; }; - } - return f; - }; - - f.padding = function(p) { - if (p != null) { - if (type$j(p) === 'number') { - p = [p,p]; - } - _padding = p; - return f; - } else { - return _padding; - } - }; - - f.colors = function(numColors, out) { - // If no arguments are given, return the original colors that were provided - if (arguments.length < 2) { out = 'hex'; } - var result = []; - - if (arguments.length === 0) { - result = _colors.slice(0); - - } else if (numColors === 1) { - result = [f(0.5)]; - - } else if (numColors > 1) { - var dm = _domain[0]; - var dd = _domain[1] - dm; - result = __range__(0, numColors, false).map(function (i) { return f( dm + ((i/(numColors-1)) * dd) ); }); - - } else { // returns all colors based on the defined classes - colors = []; - var samples = []; - if (_classes && (_classes.length > 2)) { - for (var i = 1, end = _classes.length, asc = 1 <= end; asc ? i < end : i > end; asc ? i++ : i--) { - samples.push((_classes[i-1]+_classes[i])*0.5); - } - } else { - samples = _domain; - } - result = samples.map(function (v) { return f(v); }); - } - - if (chroma_1[out]) { - result = result.map(function (c) { return c[out](); }); - } - return result; - }; - - f.cache = function(c) { - if (c != null) { - _useCache = c; - return f; - } else { - return _useCache; - } - }; - - f.gamma = function(g) { - if (g != null) { - _gamma = g; - return f; - } else { - return _gamma; - } - }; - - f.nodata = function(d) { - if (d != null) { - _nacol = chroma_1(d); - return f; - } else { - return _nacol; - } - }; - - return f; - }; - - function __range__(left, right, inclusive) { - var range = []; - var ascending = left < right; - var end = !inclusive ? right : ascending ? right + 1 : right - 1; - for (var i = left; ascending ? i < end : i > end; ascending ? i++ : i--) { - range.push(i); - } - return range; - } - - // - // interpolates between a set of colors uzing a bezier spline - // - - // @requires utils lab - - - - - var bezier = function(colors) { - var assign, assign$1, assign$2; - - var I, lab0, lab1, lab2; - colors = colors.map(function (c) { return new Color_1(c); }); - if (colors.length === 2) { - // linear interpolation - (assign = colors.map(function (c) { return c.lab(); }), lab0 = assign[0], lab1 = assign[1]); - I = function(t) { - var lab = ([0, 1, 2].map(function (i) { return lab0[i] + (t * (lab1[i] - lab0[i])); })); - return new Color_1(lab, 'lab'); - }; - } else if (colors.length === 3) { - // quadratic bezier interpolation - (assign$1 = colors.map(function (c) { return c.lab(); }), lab0 = assign$1[0], lab1 = assign$1[1], lab2 = assign$1[2]); - I = function(t) { - var lab = ([0, 1, 2].map(function (i) { return ((1-t)*(1-t) * lab0[i]) + (2 * (1-t) * t * lab1[i]) + (t * t * lab2[i]); })); - return new Color_1(lab, 'lab'); - }; - } else if (colors.length === 4) { - // cubic bezier interpolation - var lab3; - (assign$2 = colors.map(function (c) { return c.lab(); }), lab0 = assign$2[0], lab1 = assign$2[1], lab2 = assign$2[2], lab3 = assign$2[3]); - I = function(t) { - var lab = ([0, 1, 2].map(function (i) { return ((1-t)*(1-t)*(1-t) * lab0[i]) + (3 * (1-t) * (1-t) * t * lab1[i]) + (3 * (1-t) * t * t * lab2[i]) + (t*t*t * lab3[i]); })); - return new Color_1(lab, 'lab'); - }; - } else if (colors.length === 5) { - var I0 = bezier(colors.slice(0, 3)); - var I1 = bezier(colors.slice(2, 5)); - I = function(t) { - if (t < 0.5) { - return I0(t*2); - } else { - return I1((t-0.5)*2); - } - }; - } - return I; - }; - - var bezier_1 = function (colors) { - var f = bezier(colors); - f.scale = function () { return scale(f); }; - return f; - }; - - /* - * interpolates between a set of colors uzing a bezier spline - * blend mode formulas taken from http://www.venture-ware.com/kevin/coding/lets-learn-math-photoshop-blend-modes/ - */ - - - - - var blend = function (bottom, top, mode) { - if (!blend[mode]) { - throw new Error('unknown blend mode ' + mode); - } - return blend[mode](bottom, top); - }; - - var blend_f = function (f) { return function (bottom,top) { - var c0 = chroma_1(top).rgb(); - var c1 = chroma_1(bottom).rgb(); - return chroma_1.rgb(f(c0, c1)); - }; }; - - var each = function (f) { return function (c0, c1) { - var out = []; - out[0] = f(c0[0], c1[0]); - out[1] = f(c0[1], c1[1]); - out[2] = f(c0[2], c1[2]); - return out; - }; }; - - var normal = function (a) { return a; }; - var multiply = function (a,b) { return a * b / 255; }; - var darken$1 = function (a,b) { return a > b ? b : a; }; - var lighten = function (a,b) { return a > b ? a : b; }; - var screen = function (a,b) { return 255 * (1 - (1-a/255) * (1-b/255)); }; - var overlay = function (a,b) { return b < 128 ? 2 * a * b / 255 : 255 * (1 - 2 * (1 - a / 255 ) * ( 1 - b / 255 )); }; - var burn = function (a,b) { return 255 * (1 - (1 - b / 255) / (a/255)); }; - var dodge = function (a,b) { - if (a === 255) { return 255; } - a = 255 * (b / 255) / (1 - a / 255); - return a > 255 ? 255 : a - }; - - // # add = (a,b) -> - // # if (a + b > 255) then 255 else a + b - - blend.normal = blend_f(each(normal)); - blend.multiply = blend_f(each(multiply)); - blend.screen = blend_f(each(screen)); - blend.overlay = blend_f(each(overlay)); - blend.darken = blend_f(each(darken$1)); - blend.lighten = blend_f(each(lighten)); - blend.dodge = blend_f(each(dodge)); - blend.burn = blend_f(each(burn)); - // blend.add = blend_f(each(add)); - - var blend_1 = blend; - - // cubehelix interpolation - // based on D.A. Green "A colour scheme for the display of astronomical intensity images" - // http://astron-soc.in/bulletin/11June/289392011.pdf - - var type$k = utils.type; - var clip_rgb$3 = utils.clip_rgb; - var TWOPI$2 = utils.TWOPI; - var pow$6 = Math.pow; - var sin$2 = Math.sin; - var cos$3 = Math.cos; - - - var cubehelix = function(start, rotations, hue, gamma, lightness) { - if ( start === void 0 ) start=300; - if ( rotations === void 0 ) rotations=-1.5; - if ( hue === void 0 ) hue=1; - if ( gamma === void 0 ) gamma=1; - if ( lightness === void 0 ) lightness=[0,1]; - - var dh = 0, dl; - if (type$k(lightness) === 'array') { - dl = lightness[1] - lightness[0]; - } else { - dl = 0; - lightness = [lightness, lightness]; - } - - var f = function(fract) { - var a = TWOPI$2 * (((start+120)/360) + (rotations * fract)); - var l = pow$6(lightness[0] + (dl * fract), gamma); - var h = dh !== 0 ? hue[0] + (fract * dh) : hue; - var amp = (h * l * (1-l)) / 2; - var cos_a = cos$3(a); - var sin_a = sin$2(a); - var r = l + (amp * ((-0.14861 * cos_a) + (1.78277* sin_a))); - var g = l + (amp * ((-0.29227 * cos_a) - (0.90649* sin_a))); - var b = l + (amp * (+1.97294 * cos_a)); - return chroma_1(clip_rgb$3([r*255,g*255,b*255,1])); - }; - - f.start = function(s) { - if ((s == null)) { return start; } - start = s; - return f; - }; - - f.rotations = function(r) { - if ((r == null)) { return rotations; } - rotations = r; - return f; - }; - - f.gamma = function(g) { - if ((g == null)) { return gamma; } - gamma = g; - return f; - }; - - f.hue = function(h) { - if ((h == null)) { return hue; } - hue = h; - if (type$k(hue) === 'array') { - dh = hue[1] - hue[0]; - if (dh === 0) { hue = hue[1]; } - } else { - dh = 0; - } - return f; - }; - - f.lightness = function(h) { - if ((h == null)) { return lightness; } - if (type$k(h) === 'array') { - lightness = h; - dl = h[1] - h[0]; - } else { - lightness = [h,h]; - dl = 0; - } - return f; - }; - - f.scale = function () { return chroma_1.scale(f); }; - - f.hue(hue); - - return f; - }; - - var digits = '0123456789abcdef'; - - var floor$2 = Math.floor; - var random = Math.random; - - var random_1 = function () { - var code = '#'; - for (var i=0; i<6; i++) { - code += digits.charAt(floor$2(random() * 16)); - } - return new Color_1(code, 'hex'); - }; - - var log$1 = Math.log; - var pow$7 = Math.pow; - var floor$3 = Math.floor; - var abs = Math.abs; - - - var analyze = function (data, key) { - if ( key === void 0 ) key=null; - - var r = { - min: Number.MAX_VALUE, - max: Number.MAX_VALUE*-1, - sum: 0, - values: [], - count: 0 - }; - if (type(data) === 'object') { - data = Object.values(data); - } - data.forEach(function (val) { - if (key && type(val) === 'object') { val = val[key]; } - if (val !== undefined && val !== null && !isNaN(val)) { - r.values.push(val); - r.sum += val; - if (val < r.min) { r.min = val; } - if (val > r.max) { r.max = val; } - r.count += 1; - } - }); - - r.domain = [r.min, r.max]; - - r.limits = function (mode, num) { return limits(r, mode, num); }; - - return r; - }; - - - var limits = function (data, mode, num) { - if ( mode === void 0 ) mode='equal'; - if ( num === void 0 ) num=7; - - if (type(data) == 'array') { - data = analyze(data); - } - var min = data.min; - var max = data.max; - var values = data.values.sort(function (a,b) { return a-b; }); - - if (num === 1) { return [min,max]; } - - var limits = []; - - if (mode.substr(0,1) === 'c') { // continuous - limits.push(min); - limits.push(max); - } - - if (mode.substr(0,1) === 'e') { // equal interval - limits.push(min); - for (var i=1; i 0'); - } - var min_log = Math.LOG10E * log$1(min); - var max_log = Math.LOG10E * log$1(max); - limits.push(min); - for (var i$1=1; i$1 pb - var pr = p - pb; - limits.push((values[pb]*(1-pr)) + (values[pb+1]*pr)); - } - } - limits.push(max); - - } - - else if (mode.substr(0,1) === 'k') { // k-means clustering - /* - implementation based on - http://code.google.com/p/figue/source/browse/trunk/figue.js#336 - simplified for 1-d input values - */ - var cluster; - var n = values.length; - var assignments = new Array(n); - var clusterSizes = new Array(num); - var repeat = true; - var nb_iters = 0; - var centroids = null; - - // get seed values - centroids = []; - centroids.push(min); - for (var i$3=1; i$3 200) { - repeat = false; - } - } - - // finished k-means clustering - // the next part is borrowed from gabrielflor.it - var kClusters = {}; - for (var j$5=0; j$5 l2 ? (l1 + 0.05) / (l2 + 0.05) : (l2 + 0.05) / (l1 + 0.05); - }; - - var sqrt$4 = Math.sqrt; - var atan2$2 = Math.atan2; - var abs$1 = Math.abs; - var cos$4 = Math.cos; - var PI$2 = Math.PI; - - var deltaE = function(a, b, L, C) { - if ( L === void 0 ) L=1; - if ( C === void 0 ) C=1; - - // Delta E (CMC) - // see http://www.brucelindbloom.com/index.html?Eqn_DeltaE_CMC.html - a = new Color_1(a); - b = new Color_1(b); - var ref = Array.from(a.lab()); - var L1 = ref[0]; - var a1 = ref[1]; - var b1 = ref[2]; - var ref$1 = Array.from(b.lab()); - var L2 = ref$1[0]; - var a2 = ref$1[1]; - var b2 = ref$1[2]; - var c1 = sqrt$4((a1 * a1) + (b1 * b1)); - var c2 = sqrt$4((a2 * a2) + (b2 * b2)); - var sl = L1 < 16.0 ? 0.511 : (0.040975 * L1) / (1.0 + (0.01765 * L1)); - var sc = ((0.0638 * c1) / (1.0 + (0.0131 * c1))) + 0.638; - var h1 = c1 < 0.000001 ? 0.0 : (atan2$2(b1, a1) * 180.0) / PI$2; - while (h1 < 0) { h1 += 360; } - while (h1 >= 360) { h1 -= 360; } - var t = (h1 >= 164.0) && (h1 <= 345.0) ? (0.56 + abs$1(0.2 * cos$4((PI$2 * (h1 + 168.0)) / 180.0))) : (0.36 + abs$1(0.4 * cos$4((PI$2 * (h1 + 35.0)) / 180.0))); - var c4 = c1 * c1 * c1 * c1; - var f = sqrt$4(c4 / (c4 + 1900.0)); - var sh = sc * (((f * t) + 1.0) - f); - var delL = L1 - L2; - var delC = c1 - c2; - var delA = a1 - a2; - var delB = b1 - b2; - var dH2 = ((delA * delA) + (delB * delB)) - (delC * delC); - var v1 = delL / (L * sl); - var v2 = delC / (C * sc); - var v3 = sh; - return sqrt$4((v1 * v1) + (v2 * v2) + (dH2 / (v3 * v3))); - }; - - // simple Euclidean distance - var distance = function(a, b, mode) { - if ( mode === void 0 ) mode='lab'; - - // Delta E (CIE 1976) - // see http://www.brucelindbloom.com/index.html?Equations.html - a = new Color_1(a); - b = new Color_1(b); - var l1 = a.get(mode); - var l2 = b.get(mode); - var sum_sq = 0; - for (var i in l1) { - var d = (l1[i] || 0) - (l2[i] || 0); - sum_sq += d*d; - } - return Math.sqrt(sum_sq); - }; - - var valid = function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - try { - new (Function.prototype.bind.apply( Color_1, [ null ].concat( args) )); - return true; - } catch (e) { - return false; - } - }; - - // some pre-defined color scales: - - - - - var scales = { - cool: function cool() { return scale([chroma_1.hsl(180,1,.9), chroma_1.hsl(250,.7,.4)]) }, - hot: function hot() { return scale(['#000','#f00','#ff0','#fff']).mode('rgb') } - }; - - /** - ColorBrewer colors for chroma.js - - Copyright (c) 2002 Cynthia Brewer, Mark Harrower, and The - Pennsylvania State University. - - 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. - */ - - var colorbrewer = { - // sequential - OrRd: ['#fff7ec', '#fee8c8', '#fdd49e', '#fdbb84', '#fc8d59', '#ef6548', '#d7301f', '#b30000', '#7f0000'], - PuBu: ['#fff7fb', '#ece7f2', '#d0d1e6', '#a6bddb', '#74a9cf', '#3690c0', '#0570b0', '#045a8d', '#023858'], - BuPu: ['#f7fcfd', '#e0ecf4', '#bfd3e6', '#9ebcda', '#8c96c6', '#8c6bb1', '#88419d', '#810f7c', '#4d004b'], - Oranges: ['#fff5eb', '#fee6ce', '#fdd0a2', '#fdae6b', '#fd8d3c', '#f16913', '#d94801', '#a63603', '#7f2704'], - BuGn: ['#f7fcfd', '#e5f5f9', '#ccece6', '#99d8c9', '#66c2a4', '#41ae76', '#238b45', '#006d2c', '#00441b'], - YlOrBr: ['#ffffe5', '#fff7bc', '#fee391', '#fec44f', '#fe9929', '#ec7014', '#cc4c02', '#993404', '#662506'], - YlGn: ['#ffffe5', '#f7fcb9', '#d9f0a3', '#addd8e', '#78c679', '#41ab5d', '#238443', '#006837', '#004529'], - Reds: ['#fff5f0', '#fee0d2', '#fcbba1', '#fc9272', '#fb6a4a', '#ef3b2c', '#cb181d', '#a50f15', '#67000d'], - RdPu: ['#fff7f3', '#fde0dd', '#fcc5c0', '#fa9fb5', '#f768a1', '#dd3497', '#ae017e', '#7a0177', '#49006a'], - Greens: ['#f7fcf5', '#e5f5e0', '#c7e9c0', '#a1d99b', '#74c476', '#41ab5d', '#238b45', '#006d2c', '#00441b'], - YlGnBu: ['#ffffd9', '#edf8b1', '#c7e9b4', '#7fcdbb', '#41b6c4', '#1d91c0', '#225ea8', '#253494', '#081d58'], - Purples: ['#fcfbfd', '#efedf5', '#dadaeb', '#bcbddc', '#9e9ac8', '#807dba', '#6a51a3', '#54278f', '#3f007d'], - GnBu: ['#f7fcf0', '#e0f3db', '#ccebc5', '#a8ddb5', '#7bccc4', '#4eb3d3', '#2b8cbe', '#0868ac', '#084081'], - Greys: ['#ffffff', '#f0f0f0', '#d9d9d9', '#bdbdbd', '#969696', '#737373', '#525252', '#252525', '#000000'], - YlOrRd: ['#ffffcc', '#ffeda0', '#fed976', '#feb24c', '#fd8d3c', '#fc4e2a', '#e31a1c', '#bd0026', '#800026'], - PuRd: ['#f7f4f9', '#e7e1ef', '#d4b9da', '#c994c7', '#df65b0', '#e7298a', '#ce1256', '#980043', '#67001f'], - Blues: ['#f7fbff', '#deebf7', '#c6dbef', '#9ecae1', '#6baed6', '#4292c6', '#2171b5', '#08519c', '#08306b'], - PuBuGn: ['#fff7fb', '#ece2f0', '#d0d1e6', '#a6bddb', '#67a9cf', '#3690c0', '#02818a', '#016c59', '#014636'], - Viridis: ['#440154', '#482777', '#3f4a8a', '#31678e', '#26838f', '#1f9d8a', '#6cce5a', '#b6de2b', '#fee825'], - - // diverging - - Spectral: ['#9e0142', '#d53e4f', '#f46d43', '#fdae61', '#fee08b', '#ffffbf', '#e6f598', '#abdda4', '#66c2a5', '#3288bd', '#5e4fa2'], - RdYlGn: ['#a50026', '#d73027', '#f46d43', '#fdae61', '#fee08b', '#ffffbf', '#d9ef8b', '#a6d96a', '#66bd63', '#1a9850', '#006837'], - RdBu: ['#67001f', '#b2182b', '#d6604d', '#f4a582', '#fddbc7', '#f7f7f7', '#d1e5f0', '#92c5de', '#4393c3', '#2166ac', '#053061'], - PiYG: ['#8e0152', '#c51b7d', '#de77ae', '#f1b6da', '#fde0ef', '#f7f7f7', '#e6f5d0', '#b8e186', '#7fbc41', '#4d9221', '#276419'], - PRGn: ['#40004b', '#762a83', '#9970ab', '#c2a5cf', '#e7d4e8', '#f7f7f7', '#d9f0d3', '#a6dba0', '#5aae61', '#1b7837', '#00441b'], - RdYlBu: ['#a50026', '#d73027', '#f46d43', '#fdae61', '#fee090', '#ffffbf', '#e0f3f8', '#abd9e9', '#74add1', '#4575b4', '#313695'], - BrBG: ['#543005', '#8c510a', '#bf812d', '#dfc27d', '#f6e8c3', '#f5f5f5', '#c7eae5', '#80cdc1', '#35978f', '#01665e', '#003c30'], - RdGy: ['#67001f', '#b2182b', '#d6604d', '#f4a582', '#fddbc7', '#ffffff', '#e0e0e0', '#bababa', '#878787', '#4d4d4d', '#1a1a1a'], - PuOr: ['#7f3b08', '#b35806', '#e08214', '#fdb863', '#fee0b6', '#f7f7f7', '#d8daeb', '#b2abd2', '#8073ac', '#542788', '#2d004b'], - - // qualitative - - Set2: ['#66c2a5', '#fc8d62', '#8da0cb', '#e78ac3', '#a6d854', '#ffd92f', '#e5c494', '#b3b3b3'], - Accent: ['#7fc97f', '#beaed4', '#fdc086', '#ffff99', '#386cb0', '#f0027f', '#bf5b17', '#666666'], - Set1: ['#e41a1c', '#377eb8', '#4daf4a', '#984ea3', '#ff7f00', '#ffff33', '#a65628', '#f781bf', '#999999'], - Set3: ['#8dd3c7', '#ffffb3', '#bebada', '#fb8072', '#80b1d3', '#fdb462', '#b3de69', '#fccde5', '#d9d9d9', '#bc80bd', '#ccebc5', '#ffed6f'], - Dark2: ['#1b9e77', '#d95f02', '#7570b3', '#e7298a', '#66a61e', '#e6ab02', '#a6761d', '#666666'], - Paired: ['#a6cee3', '#1f78b4', '#b2df8a', '#33a02c', '#fb9a99', '#e31a1c', '#fdbf6f', '#ff7f00', '#cab2d6', '#6a3d9a', '#ffff99', '#b15928'], - Pastel2: ['#b3e2cd', '#fdcdac', '#cbd5e8', '#f4cae4', '#e6f5c9', '#fff2ae', '#f1e2cc', '#cccccc'], - Pastel1: ['#fbb4ae', '#b3cde3', '#ccebc5', '#decbe4', '#fed9a6', '#ffffcc', '#e5d8bd', '#fddaec', '#f2f2f2'], - }; - - // add lowercase aliases for case-insensitive matches - for (var i$1 = 0, list$1 = Object.keys(colorbrewer); i$1 < list$1.length; i$1 += 1) { - var key = list$1[i$1]; - - colorbrewer[key.toLowerCase()] = colorbrewer[key]; - } - - var colorbrewer_1 = colorbrewer; - - // feel free to comment out anything to rollup - // a smaller chroma.js built - - // io --> convert colors - - - - - - - - - - - - - - - - // operators --> modify existing Colors - - - - - - - - - - - // interpolators - - - - - - - - - - - // generators -- > create new colors - chroma_1.average = average; - chroma_1.bezier = bezier_1; - chroma_1.blend = blend_1; - chroma_1.cubehelix = cubehelix; - chroma_1.mix = chroma_1.interpolate = mix; - chroma_1.random = random_1; - chroma_1.scale = scale; - - // other utility methods - chroma_1.analyze = analyze_1.analyze; - chroma_1.contrast = contrast; - chroma_1.deltaE = deltaE; - chroma_1.distance = distance; - chroma_1.limits = analyze_1.limits; - chroma_1.valid = valid; - - // scale - chroma_1.scales = scales; - - // colors - chroma_1.colors = w3cx11_1; - chroma_1.brewer = colorbrewer_1; - - var chroma_js = chroma_1; - - return chroma_js; - -}))); -}); - -function generateColorVariables(key, format, colorStr, opacity, altFormats = []) { - const parsedColor = chroma(colorStr); - const alts = altFormats.reduce((a, alt) => { - a.push(...generateColorVariables(alt.id, alt.format, colorStr, opacity)); - return a; - }, []); - switch (format) { - case 'hex': - return [{ key, value: colorStr }, ...alts]; - case 'hsl': - return [ - { - key, - value: parsedColor.css('hsl'), - }, - ...alts, - ]; - case 'hsl-values': { - const hsl = parsedColor.hsl(); - const alpha = opacity ? `,${parsedColor.alpha()}` : ''; - const h = isNaN(hsl[0]) ? 0 : hsl[0]; - return [ - { - key, - value: `${h},${hsl[1] * 100}%,${hsl[2] * 100}%${alpha}`, - }, - ...alts, - ]; - } - case 'hsl-split': { - const hsl = parsedColor.hsl(); - const h = isNaN(hsl[0]) ? 0 : hsl[0]; - const out = [ - { - key: `${key}-h`, - value: h.toString(), - }, - { - key: `${key}-s`, - value: (hsl[1] * 100).toString() + '%', - }, - { - key: `${key}-l`, - value: (hsl[2] * 100).toString() + '%', - }, - ...alts, - ]; - if (opacity) - out.push({ - key: `${key}-a`, - value: parsedColor.alpha().toString(), - }); - return out; - } - case 'hsl-split-decimal': { - const hsl = parsedColor.hsl(); - const h = isNaN(hsl[0]) ? 0 : hsl[0]; - const out = [ - { - key: `${key}-h`, - value: h.toString(), - }, - { - key: `${key}-s`, - value: hsl[1].toString(), - }, - { - key: `${key}-l`, - value: hsl[2].toString(), - }, - ...alts, - ]; - if (opacity) - out.push({ - key: `${key}-a`, - value: parsedColor.alpha().toString(), - }); - return out; - } - case 'rgb': - return [ - { - key, - value: parsedColor.css(), - }, - ...alts, - ]; - case 'rgb-values': { - const rgb = parsedColor.rgb(); - const alpha = opacity ? `,${parsedColor.alpha()}` : ''; - return [ - { - key, - value: `${rgb[0]},${rgb[1]},${rgb[2]}${alpha}`, - }, - ...alts, - ]; - } - case 'rgb-split': { - const rgb = parsedColor.rgb(); - const out = [ - { - key: `${key}-r`, - value: rgb[0].toString(), - }, - { - key: `${key}-g`, - value: rgb[1].toString(), - }, - { - key: `${key}-b`, - value: rgb[2].toString(), - }, - ...alts, - ]; - if (opacity) - out.push({ - key: `${key}-a`, - value: parsedColor.alpha().toString(), - }); - return out; - } - } -} -function pushColors(arr, id, from, to, format, step, pad) { - const scale = chroma.scale([from.trim(), to.trim()]).domain([0, 100]); - for (let i = 0; i <= 100; i++) { - if (i % step === 0) { - const c = scale(i); - arr.push(...generateColorVariables(`${id}-${i.toString().padStart(pad, '0')}`, format, c.css(), c.alpha() !== 1)); - } - } -} -function getCSSVariables(settings, config, gradients, settingsManager) { - const vars = []; - const themedLight = []; - const themedDark = []; - const gradientCandidates = {}; - const gradientCandidatesLight = {}; - const gradientCandidatesDark = {}; - const seenGradientSections = new Set(); - for (const key in settings) { - const [sectionId, settingId, modifier] = key.split('@@'); - const section = config[sectionId]; - if (!section) - continue; - const setting = config[sectionId][settingId]; - if (!setting) - continue; - const value = settings[key]; - switch (setting.type) { - case SettingType.VARIABLE_NUMBER: - case SettingType.VARIABLE_NUMBER_SLIDER: { - const format = setting - .format; - const val = value !== undefined - ? value - : setting.default; - vars.push({ - key: setting.id, - value: `${val}${format || ''}`, - }); - continue; - } - case SettingType.VARIABLE_TEXT: - case SettingType.VARIABLE_SELECT: { - const format_text = setting; - let text = value !== undefined - ? value.toString() - : format_text.default.toString(); - if (format_text.quotes) { - if (text !== `""`) { - text = `'${text}'`; - } - else { - text = ``; - } - } - vars.push({ - key: setting.id, - value: text, - }); - continue; - } - case SettingType.VARIABLE_COLOR: { - if (!seenGradientSections.has(sectionId)) - seenGradientSections.add(sectionId); - const colorSetting = setting; - const color = value !== undefined ? value.toString() : colorSetting.default; - vars.push(...generateColorVariables(setting.id, colorSetting.format, color, colorSetting.opacity, colorSetting['alt-format'])); - generateColorVariables(setting.id, 'rgb', color, colorSetting.opacity).forEach((kv) => { - gradientCandidates[kv.key] = kv.value; - }); - continue; - } - case SettingType.VARIABLE_THEMED_COLOR: { - if (!seenGradientSections.has(sectionId)) - seenGradientSections.add(sectionId); - const colorSetting = setting; - const colorKey = modifier === 'light' ? 'default-light' : 'default-dark'; - const color = value !== undefined ? value.toString() : colorSetting[colorKey]; - (modifier === 'light' ? themedLight : themedDark).push(...generateColorVariables(setting.id, colorSetting.format, color, colorSetting.opacity, colorSetting['alt-format'])); - generateColorVariables(setting.id, 'rgb', color, colorSetting.opacity).forEach((kv) => { - if (modifier === 'light') { - gradientCandidatesLight[kv.key] = kv.value; - } - else { - gradientCandidatesDark[kv.key] = kv.value; - } - }); - continue; - } - } - } - seenGradientSections.forEach((sectionId) => { - const g = gradients[sectionId]; - if (!g) - return; - g.forEach((def) => { - var _a, _b, _c; - const { from, to, format, step, id, pad = 0 } = def; - if (gradientCandidatesLight[from]) { - const fromColor = gradientCandidatesLight[from]; - const toColor = gradientCandidatesLight[to] || - ((_a = settingsManager.plugin.getCSSVar(to).light) === null || _a === void 0 ? void 0 : _a.trim()); - if (toColor) { - pushColors(themedLight, id, fromColor, toColor, format, step, pad); - } - } - if (gradientCandidatesDark[from]) { - const fromColor = gradientCandidatesDark[from]; - const toColor = gradientCandidatesDark[to] || - ((_b = settingsManager.plugin.getCSSVar(to).dark) === null || _b === void 0 ? void 0 : _b.trim()); - if (toColor) { - pushColors(themedDark, id, fromColor, toColor, format, step, pad); - } - } - if (gradientCandidates[from]) { - const fromColor = gradientCandidates[from]; - const toColor = gradientCandidates[to] || - ((_c = settingsManager.plugin.getCSSVar(to).current) === null || _c === void 0 ? void 0 : _c.trim()); - if (toColor) { - pushColors(vars, id, fromColor, toColor, format, step, pad); - } - } - }); - }); - return [vars, themedLight, themedDark]; -} -class CSSSettingsManager { - constructor(plugin) { - this.config = {}; - this.gradients = {}; - this.plugin = plugin; - this.settings = {}; - this.styleTag = document.createElement('style'); - this.styleTag.id = 'css-settings-manager'; - document.getElementsByTagName('head')[0].appendChild(this.styleTag); - } - cleanup() { - this.styleTag.remove(); - this.removeClasses(); - } - save() { - return __awaiter(this, void 0, void 0, function* () { - yield this.plugin.saveData(this.settings); - this.setCSSVariables(); - }); - } - load() { - return __awaiter(this, void 0, void 0, function* () { - this.settings = Object.assign({}, yield this.plugin.loadData()); - }); - } - initClasses() { - Object.keys(this.config).forEach((section) => { - const config = this.config[section]; - Object.keys(config).forEach((settingId) => { - const setting = config[settingId]; - if (setting.type === SettingType.CLASS_TOGGLE) { - const classToggle = setting; - const value = this.getSetting(section, settingId); - if (value === true || - (value === undefined && classToggle.default === true)) { - document.body.classList.add(setting.id); - } - } - else if (setting.type === SettingType.CLASS_SELECT) { - const multiToggle = setting; - let value = this.getSetting(section, settingId); - if (value === undefined && !!multiToggle.default) { - value = multiToggle.default; - } - else if (value === undefined) { - value = 'none'; - } - if (value !== 'none') { - document.body.classList.add(value); - } - } - }); - }); - } - removeClasses() { - Object.keys(this.config).forEach((section) => { - const config = this.config[section]; - Object.keys(config).forEach((settingId) => { - const setting = config[settingId]; - if (setting.type === SettingType.CLASS_TOGGLE) { - document.body.classList.remove(setting.id); - } - else if (setting.type === SettingType.CLASS_SELECT) { - const multiToggle = setting; - multiToggle.options.forEach((v) => { - if (typeof v === 'string') { - document.body.classList.remove(v); - } - else { - document.body.classList.remove(v.value); - } - }); - } - }); - }); - } - setCSSVariables() { - const [vars, themedLight, themedDark] = getCSSVariables(this.settings, this.config, this.gradients, this); - this.styleTag.innerText = ` - body.css-settings-manager { - ${vars.reduce((combined, current) => { - return combined + `--${current.key}: ${current.value}; `; - }, '')} - } - - body.theme-light.css-settings-manager { - ${themedLight.reduce((combined, current) => { - return combined + `--${current.key}: ${current.value}; `; - }, '')} - } - - body.theme-dark.css-settings-manager { - ${themedDark.reduce((combined, current) => { - return combined + `--${current.key}: ${current.value}; `; - }, '')} - } - ` - .trim() - .replace(/[\r\n\s]+/g, ' '); - this.plugin.app.workspace.trigger('css-change', { - source: 'style-settings', - }); - } - setConfig(settings) { - this.config = {}; - this.gradients = {}; - settings.forEach((s) => { - this.config[s.id] = {}; - s.settings.forEach((setting) => { - this.config[s.id][setting.id] = setting; - if (setting.type === SettingType.COLOR_GRADIENT) { - if (!this.gradients[s.id]) - this.gradients[s.id] = []; - this.gradients[s.id].push(setting); - } - }); - }); - let pruned = false; - for (const key in this.settings) { - const [sectionId, settingId] = key.split('@@'); - if (this.config[sectionId] && !this.config[sectionId][settingId]) { - delete this.settings[key]; - pruned = true; - } - } - if (pruned) { - this.save(); - } - else { - this.setCSSVariables(); - } - } - getSetting(sectionId, settingId) { - return this.settings[`${sectionId}@@${settingId}`]; - } - getSettings(sectionId, ids) { - return ids.reduce((settings, id) => { - const fullId = `${sectionId}@@${id}`; - const alts = ['dark', 'light']; - if (this.settings[fullId]) { - settings[fullId] = this.settings[fullId]; - } - alts.forEach((alt) => { - const id = `${fullId}@@${alt}`; - if (this.settings[id]) { - settings[id] = this.settings[id]; - } - }); - return settings; - }, {}); - } - setSetting(sectionId, settingId, value) { - this.settings[`${sectionId}@@${settingId}`] = value; - this.save(); - this.removeClasses(); - this.initClasses(); - } - setSettings(settings) { - Object.keys(settings).forEach((id) => { - this.settings[id] = settings[id]; - }); - this.removeClasses(); - this.initClasses(); - return this.save(); - } - clearSetting(sectionId, settingId) { - delete this.settings[`${sectionId}@@${settingId}`]; - this.save(); - this.removeClasses(); - this.initClasses(); - } - clearSection(sectionId) { - Object.keys(this.settings).forEach((key) => { - const [section] = key.split('@@'); - if (section === sectionId) { - delete this.settings[key]; - } - }); - this.save(); - this.removeClasses(); - this.initClasses(); - } - export(section, config) { - new ExportModal(this.plugin.app, this.plugin, section, config).open(); - } - import() { - new ImportModal(this.plugin.app, this.plugin).open(); - } -} - -const ar = {}; - -const cz = {}; - -const da = {}; - -const de = { - 'Default:': 'Standard:', - 'Error:': 'Fehler:', - 'missing default light value, or value is not in a valid color format': 'Fehlender heller standard Wert oder Wert ist in keinem validen Farb-Format', - 'missing default dark value, or value is not in a valid color format': 'Fehlender dunkler standard Wert oder Wert ist in keinem validen Farb-Format', - 'missing default value, or value is not in a valid color format': 'Fehlender standard Wert oder Wert ist in keinem validen Farb-Format', - 'missing default value': 'Fehlender standard Wert', -}; - -const en = { - 'Default:': 'Default:', - 'Error:': 'Error:', - 'missing default light value, or value is not in a valid color format': 'missing default light value, or value is not in a valid color format', - 'missing default dark value, or value is not in a valid color format': 'missing default dark value, or value is not in a valid color format', - 'missing default value, or value is not in a valid color format': 'missing default value, or value is not in a valid color format', - 'missing default value': 'missing default value', -}; - -const es = {}; - -const fr = {}; - -const hi = {}; - -const id = {}; - -const it = {}; - -const ja = {}; - -const ko = {}; - -const nl = { - 'Default:': 'Standaard:', - 'Error:': 'Error:', - 'missing default light value, or value is not in a valid color format': 'Geen standaard waarde voor het lichte thema, of de waarde is niet in het goede formaat', - 'missing default dark value, or value is not in a valid color format': 'Geen standaard waarde voor het donkere thema, of de waarde is niet in het goede formaat', - 'missing default value, or value is not in a valid color format': 'Geen standaard waarde, of de waarde is niet in het goede formaat', - 'missing default value': 'Geen standaard waarde', -}; - -const no = {}; - -const pl = {}; - -const pt = {}; - -const ptBr = {}; - -const ro = {}; - -const ru = {}; - -const sq = {}; - -const tr = {}; - -const uk = {}; - -const zh = { - 'Default:': '默认:', - 'Error:': '错误:', - 'missing default light value, or value is not in a valid color format': '缺少默认的浅色模式色值,或该色值没有采用一个有效的颜色格式', - 'missing default dark value, or value is not in a valid color format': '缺少默认的深色模式色值,或该色值没有采用一个有效的颜色格式', - 'missing default value, or value is not in a valid color format': '缺少默认色值,或该色值没有采用一个有效的颜色格式', - 'missing default value': '缺少默认色值', -}; - -const zhTw = {}; - -const lang = window.localStorage.getItem('language'); -const localeMap = { - ar, - cz, - da, - de, - en, - es, - fr, - hi, - id, - it, - ja, - ko, - nl, - no, - pl, - 'pt-BR': ptBr, - pt, - ro, - ru, - sq, - tr, - uk, - 'zh-TW': zhTw, - zh, -}; -const locale = localeMap[lang || 'en']; -function t(str) { - if (!locale) { - console.error('Error: Style Settings locale not found', lang); - } - return (locale && locale[str]) || en[str]; -} - -const settingRegExp = /\/\*!?\s*@settings[\r\n]+?([\s\S]+?)\*\//g; -const nameRegExp = /^name:\s*(.+)$/m; -function getTitle(config) { - if (lang) { - return config[`title.${lang}`] || config.title; - } - return config.title; -} -function getDescription(config) { - if (lang) { - return (config[`description.${lang}`] || - config.description); - } - return config.description; -} -function isValidDefaultColor(color) { - return /^(#|rgb|hsl)/.test(color); -} -function getPickrSettings(opts) { - const { el, isView, containerEl, swatches, opacity, defaultColor } = opts; - return { - el, - container: isView ? document.body : containerEl, - theme: 'nano', - swatches, - lockOpacity: !opacity, - default: defaultColor, - position: 'left-middle', - components: { - preview: true, - hue: true, - opacity: !!opacity, - interaction: { - hex: true, - rgba: true, - hsla: true, - input: true, - cancel: true, - save: true, - }, - }, - }; -} -function onPickrCancel(instance) { - instance.hide(); -} -function sanitizeText(str) { - if (str === '') { - return `""`; - } - return str.replace(/[;<>]/g, ''); -} -function createDescription(description, def, defLabel) { - const fragment = createFragment(); - if (description) { - fragment.appendChild(document.createTextNode(description)); - } - if (def) { - const small = createEl('small'); - small.appendChild(createEl('strong', { text: `${t('Default:')} ` })); - small.appendChild(document.createTextNode(defLabel || def)); - const div = createEl('div'); - div.appendChild(small); - fragment.appendChild(div); - } - return fragment; -} - -var fuzzysort = createCommonjsModule(function (module) { -((root, UMD) => { - if(module.exports) module.exports = UMD(); - else root['fuzzysort'] = UMD(); -})(commonjsGlobal, _ => { - - var single = (search, target) => { if(search=='farzher')return {target:"farzher was here (^-^*)/",score:0,_indexes:[0]} - if(!search || !target) return NULL - - var preparedSearch = getPreparedSearch(search); - if(!isObj(target)) target = getPrepared(target); - - var searchBitflags = preparedSearch.bitflags; - if((searchBitflags & target._bitflags) !== searchBitflags) return NULL - - return algorithm(preparedSearch, target) - }; - - - var go = (search, targets, options) => { if(search=='farzher')return [{target:"farzher was here (^-^*)/",score:0,_indexes:[0],obj:targets?targets[0]:NULL}] - if(!search) return options&&options.all ? all(search, targets, options) : noResults - - var preparedSearch = getPreparedSearch(search); - var searchBitflags = preparedSearch.bitflags; - preparedSearch.containsSpace; - - var threshold = options&&options.threshold || INT_MIN; - var limit = options&&options['limit'] || INT_MAX; // for some reason only limit breaks when minified - - var resultsLen = 0; var limitedCount = 0; - var targetsLen = targets.length; - - // This code is copy/pasted 3 times for performance reasons [options.keys, options.key, no keys] - - // options.key - if(options && options.key) { - var key = options.key; - for(var i = 0; i < targetsLen; ++i) { var obj = targets[i]; - var target = getValue(obj, key); - if(!target) continue - if(!isObj(target)) target = getPrepared(target); - - if((searchBitflags & target._bitflags) !== searchBitflags) continue - var result = algorithm(preparedSearch, target); - if(result === NULL) continue - if(result.score < threshold) continue - - // have to clone result so duplicate targets from different obj can each reference the correct obj - result = {target:result.target, _targetLower:'', _targetLowerCodes:NULL, _nextBeginningIndexes:NULL, _bitflags:0, score:result.score, _indexes:result._indexes, obj:obj}; // hidden - - if(resultsLen < limit) { q.add(result); ++resultsLen; } - else { - ++limitedCount; - if(result.score > q.peek().score) q.replaceTop(result); - } - } - - // options.keys - } else if(options && options.keys) { - var scoreFn = options['scoreFn'] || defaultScoreFn; - var keys = options.keys; - var keysLen = keys.length; - for(var i = 0; i < targetsLen; ++i) { var obj = targets[i]; - var objResults = new Array(keysLen); - for (var keyI = 0; keyI < keysLen; ++keyI) { - var key = keys[keyI]; - var target = getValue(obj, key); - if(!target) { objResults[keyI] = NULL; continue } - if(!isObj(target)) target = getPrepared(target); - - if((searchBitflags & target._bitflags) !== searchBitflags) objResults[keyI] = NULL; - else objResults[keyI] = algorithm(preparedSearch, target); - } - objResults.obj = obj; // before scoreFn so scoreFn can use it - var score = scoreFn(objResults); - if(score === NULL) continue - if(score < threshold) continue - objResults.score = score; - if(resultsLen < limit) { q.add(objResults); ++resultsLen; } - else { - ++limitedCount; - if(score > q.peek().score) q.replaceTop(objResults); - } - } - - // no keys - } else { - for(var i = 0; i < targetsLen; ++i) { var target = targets[i]; - if(!target) continue - if(!isObj(target)) target = getPrepared(target); - - if((searchBitflags & target._bitflags) !== searchBitflags) continue - var result = algorithm(preparedSearch, target); - if(result === NULL) continue - if(result.score < threshold) continue - if(resultsLen < limit) { q.add(result); ++resultsLen; } - else { - ++limitedCount; - if(result.score > q.peek().score) q.replaceTop(result); - } - } - } - - if(resultsLen === 0) return noResults - var results = new Array(resultsLen); - for(var i = resultsLen - 1; i >= 0; --i) results[i] = q.poll(); - results.total = resultsLen + limitedCount; - return results - }; - - - var highlight = (result, hOpen, hClose) => { - if(typeof hOpen === 'function') return highlightCallback(result, hOpen) - if(result === NULL) return NULL - if(hOpen === undefined) hOpen = ''; - if(hClose === undefined) hClose = ''; - var highlighted = ''; - var matchesIndex = 0; - var opened = false; - var target = result.target; - var targetLen = target.length; - var indexes = result._indexes; - indexes = indexes.slice(0, indexes.len).sort((a,b)=>a-b); - for(var i = 0; i < targetLen; ++i) { var char = target[i]; - if(indexes[matchesIndex] === i) { - ++matchesIndex; - if(!opened) { opened = true; - highlighted += hOpen; - } - - if(matchesIndex === indexes.length) { - highlighted += char + hClose + target.substr(i+1); - break - } - } else { - if(opened) { opened = false; - highlighted += hClose; - } - } - highlighted += char; - } - - return highlighted - }; - var highlightCallback = (result, cb) => { - if(result === NULL) return NULL - var target = result.target; - var targetLen = target.length; - var indexes = result._indexes; - indexes = indexes.slice(0, indexes.len).sort((a,b)=>a-b); - var highlighted = ''; - var matchI = 0; - var indexesI = 0; - var opened = false; - var result = []; - for(var i = 0; i < targetLen; ++i) { var char = target[i]; - if(indexes[indexesI] === i) { - ++indexesI; - if(!opened) { opened = true; - result.push(highlighted); highlighted = ''; - } - - if(indexesI === indexes.length) { - highlighted += char; - result.push(cb(highlighted, matchI++)); highlighted = ''; - result.push(target.substr(i+1)); - break - } - } else { - if(opened) { opened = false; - result.push(cb(highlighted, matchI++)); highlighted = ''; - } - } - highlighted += char; - } - return result - }; - - - var indexes = result => result._indexes.slice(0, result._indexes.len).sort((a,b)=>a-b); - - - var prepare = (target) => { - if(typeof target !== 'string') target = ''; - var info = prepareLowerInfo(target); - return {'target':target, _targetLower:info._lower, _targetLowerCodes:info.lowerCodes, _nextBeginningIndexes:NULL, _bitflags:info.bitflags, 'score':NULL, _indexes:[0], 'obj':NULL} // hidden - }; - - - // Below this point is only internal code - // Below this point is only internal code - // Below this point is only internal code - // Below this point is only internal code - - - var prepareSearch = (search) => { - if(typeof search !== 'string') search = ''; - search = search.trim(); - var info = prepareLowerInfo(search); - - var spaceSearches = []; - if(info.containsSpace) { - var searches = search.split(/\s+/); - searches = [...new Set(searches)]; // distinct - for(var i=0; i { - if(target.length > 999) return prepare(target) // don't cache huge targets - var targetPrepared = preparedCache.get(target); - if(targetPrepared !== undefined) return targetPrepared - targetPrepared = prepare(target); - preparedCache.set(target, targetPrepared); - return targetPrepared - }; - var getPreparedSearch = (search) => { - if(search.length > 999) return prepareSearch(search) // don't cache huge searches - var searchPrepared = preparedSearchCache.get(search); - if(searchPrepared !== undefined) return searchPrepared - searchPrepared = prepareSearch(search); - preparedSearchCache.set(search, searchPrepared); - return searchPrepared - }; - - - var all = (search, targets, options) => { - var results = []; results.total = targets.length; - - var limit = options && options.limit || INT_MAX; - - if(options && options.key) { - for(var i=0;i

    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∋VMb|HNQo_qB@h0;tv9pB|4dN5@0OocrTe+xI z7CK|f;UNpsj-`0jk8fYfCy1w$D!okR4Lp$HQbnLp^*7>~_ekVntswH+%f!`ylmEQO z5tXCZhK2DVHjgh?sDk~SW=Z9Xt;>d61tL|-n92bVp-vz|H&7=>Gb5+F?ry+b$h?yT zx8+!^$(ducuAwc6uOv~&b)Juc(RP3h_u+u&MRk^WBeF}|Dn`4j&M9)+Pf&FgnK0ZK zNTUa^L19SSl{O5Erx6BjZbqb#%wEHheBzFH2C?@zPO5(QAu$0utuX;s#qh@9%Hn*W zYA&BkndMaD=+9KSvQ4LtrX^OXl4!efwP!|6JO*BA+TS+{;UVoq2qZMSC)9s7b|ie!